关闭socket.io上的套接字服务器端?

Der*_*rek 16 javascript node.js socket.io

我很确定这是一个简单的问题,但我不知道socket.io文档在哪里,而http://labs.learnboost.com/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
    
    });
    
    Run Code Online (Sandbox Code Playgroud)

如何结束套接字连接?(上面的连接然后断开连接用于测试)

Fem*_*emi 18

试着打电话:

socket.disconnect('unauthorized');
Run Code Online (Sandbox Code Playgroud)

要么

socket.close();
Run Code Online (Sandbox Code Playgroud)

编辑:您可能能够检查referer标头.查看Socket.io安全问题以获取更多信息.

  • socket.close()不起作用,但socket.disconnect()没有.THX,顺便问一下你知道socket.io的完整文档在哪里? (3认同)

Pet*_*ons 11

在服务器端有一个socket.disconnect方法,它采用布尔意义关闭底层传输连接.以下是截至2010年7月的docs源代码:

/**
 * 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;
};
Run Code Online (Sandbox Code Playgroud)

所以你应该打电话 socket.disconnect(true);

  • 赞成这个,因为虽然''未授权''有效,但它的工作原理是因为它是_truthy_; 这是使用`disconnect`功能的更合适的方法. (4认同)