web-dev-qa-db-ja.com

socket.ioのソケットサーバー側を閉じますか?

これは簡単な質問だと確信していますが、socket.ioのドキュメントがどこにあるのか、そして http://labs.learnboost.com/socket.io/ don 'にあるのかわかりません。 tは本当に役立ちます。

それで、私がsocket.io httpサーバーを持っていて、それに接続するためのWebサイトを書いたとしましょう。

  1. 許可されていない人(Webサイトを介さずに接続した人)がブロック/ドロップ/禁止されるように、サーバーを保護するにはどうすればよいですか。

  2. サーバー側でソケット接続を終了するにはどうすればよいですか?だから私が持っているなら

    io.sockets.on('connection', function (socket) {
    socket.on('end', function() {
        var i = global_sockets_list.indexOf(socket);
        global_sockets_list.splice(i, 1);
      });
    
      socket.emit('end'); // Doesn't work, just sends data
      socket.end(); //error
    
    });
    

ソケット接続を終了するにはどうすればよいですか? (上記の接続と切断はテスト用です)

17
Derek

電話してみてください:

socket.disconnect('unauthorized');

または

socket.close();

編集:リファラーヘッダーを確認できる場合があります。詳細については、 Socket.ioセキュリティの問題 を参照してください。

19
Femi

サーバー側には、基になるトランスポート接続を閉じることを意味するブール値をとる socket.disconnect メソッドがあります。 2010年7月現在のドキュメントのソースコードは次のとおりです。

_/**
 * Disconnects this client.
 *
 * @param {Boolean} if `true`, closes the underlying connection
 * @return {Socket} self
 * @api public
 */

Socket.prototype.disconnect = function(close){
  if (!this.connected) return this;
  if (close) {
    this.client.disconnect();
  } else {
    this.packet({ type: parser.DISCONNECT });
    this.onclose('server namespace disconnect');
  }
  return this;
};
_

したがって、socket.disconnect(true);を呼び出す必要があります

11
Peter Lyons