2011-09-20 120 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

相关问题