【问题标题】:Closing a socket server side on socket.io?在 socket.io 上关闭套接字服务器端?
【发布时间】:2011-11-21 12:28:54
【问题描述】:

我很确定这是一个简单的问题,但我不知道 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
    
    });
    

如何结束套接字连接? (上面的先连接后断开是为了测试)

【问题讨论】:

  • 人们如何以未经授权的方式进行连接。我正在使用 socket.io,并且很想确保使用 socket.io 的 Web 服务器是安全的。

标签: javascript node.js socket.io


【解决方案1】:

尝试调用:

socket.disconnect('unauthorized');

socket.close();

编辑:您也许可以检查引荐来源标头。更多信息请查看Socket.io Security Issues

【讨论】:

  • socket.close() 不起作用,但 socket.disconnect() 起作用了。 THX,顺便说一句,你知道 socket.io 的完整文档在哪里吗?
  • 除了 wiki 之外确实没有任何好的详细文档(请参阅 github.com/LearnBoost/socket.io/wiki)。在我的情况下,我打开 socket.io 源代码并寻找适当命名的函数(如 disconnectclose :))。
  • 你知道我的问题第 1 部分的答案吗?
【解决方案2】:

在服务器端有一个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);

【讨论】:

  • 赞成这个,因为虽然'unauthorized' 有效,但它有效,因为它是真实;这是使用disconnect 函数的更合适的方式。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2021-04-04
  • 1970-01-01
  • 2015-04-07
  • 2013-02-17
  • 1970-01-01
  • 2013-01-16
  • 1970-01-01
相关资源
最近更新 更多