2011-09-20 122 views
16

我很確定這是一個簡單的問題,但我不知道socket.io文檔在哪裏,http://labs.learnboost.com/socket.io/也沒有什麼幫助。關閉socket.io上的套接字服務器端?

那麼,假設我有一個socket.io http服務器並編寫了一個網站來連接它。

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

編輯:您可能能夠檢查參照標頭。查看Socket.io Security Issues瞭解更多信息。

+3

socket.close()不起作用,但是socket.disconnect()做了。 THX,btw是否知道socket.io的完整文檔在哪裏? – Derek

+0

維基之外確實沒有任何好的詳細文檔(請參閱https://github.com/LearnBoost/socket.io/wiki)。在我的情況下,我打開socket.io源代碼並查找適當命名的函數(如'disconnect'或'close' :))。 – Femi

+0

你知道我的問題第一部分的答案嗎? – 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 for this one,因爲雖然''unauthorized''工作,它的工作原理是因爲它_truthy_;這是使用'disconnect'功能的更合適的方式。 – Shibumi

相關問題