2011-09-20 6 views
16

これは簡単な質問ですが、socket.ioのドキュメントがどこにあり、http://labs.learnboost.com/socket.io/のドキュメントが本当に役に立たないのか分かりません。socket.ioのソケットサーバー側を閉じますか?

私はsocket.io httpサーバーを持っていて、接続するWebサイトを作成したとしましょう。

  1. 許可されていない人(ウェブサイト以外の人に接続した人)がブロック/ドロップ/禁止されるようにするにはどうすればよいですか?

  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 
    
    }); 
    

を持っている場合ので、どのように私は、ソケット接続を終了しますか? (その後、上記抜い接続がテストのためである)

+0

を呼び出す必要があります。私はsocket.ioを使って作業していて、socket.ioを持つWebサーバーが確実に保護されていることを知りたいと思っていました。 – j10

答えて

18

呼び出してみてください。

socket.disconnect('unauthorized'); 

または

socket.close(); 

EDIT:あなたはRefererヘッダをチェックすることができるかもしれません。詳細はSocket.io Security Issuesをご覧ください。

+3

socket.close()は機能しませんが、socket.disconnect()は機能しません。 THX、btwどこsocket.ioの完全なドキュメントがわかりますか? – Derek

+0

実際には、wiki以外の詳細なドキュメントはありません(https://github.com/LearnBoost/socket.io/wikiを参照)。私の場合、socket.ioソースコードを開き、適切に名前付きの関数( 'disconnect'や' close'など)を探します。 – Femi

+0

私の質問パート1への答えを知っていますか? – Derek

8

サーバー側には、基本トランスポート接続を閉じるブール値をとる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);

+2

これはUpvoteです。なぜなら、 '' unauthorized''は動作しますが、それは_truthy_なので動作します。これは 'disconnect'関数を使うより適切な方法です。 – Shibumi

関連する問題