【问题标题】:How do I completely destroy a socket.io connection?如何完全破坏 socket.io 连接?
【发布时间】:2013-04-10 05:10:30
【问题描述】:

我正在从 Socket.io 和 Node.js 创建一个浏览器聊天。一切都运行顺利,但我似乎在断开套接字时遇到了问题。当我运行socket.disconnet(); 时,服务器运行socket.on("disconnect", 事件,但它实际上并没有从内部侦听器中删除套接字。

当我在套接字上运行socket.disconnect(); 时,套接字不再接收任何新消息,但是当“断开连接”的用户发送消息时,服务器会接收并将其发送回所有客户端。我想创建一个正确的/kick 命令,但是当我必须重组所有代码以适应一个简单的功能时,这很困难。

socket.connection.destroy();socket.end();socket.transport.destroy(); 等命令无效且未定义。有没有人有什么建议?我已经解决这个问题好几天了,除了为套接字设置shutup 布尔值并告诉消息事件忽略特定套接字之外,我没有找到任何答案。这是最好的方法吗?如果用户开始编辑 javascript 代码并且我需要从客户端接收其他事件的方法,会发生什么情况?

【问题讨论】:

  • 节点版本? socket.io 版本?查看源代码github.com/LearnBoost/socket.io/blob/0.9.14/lib/socket.js#L290socket.disconnect() 看起来不错。
  • 正如我所说,“当我在套接字上运行 socket.disconnect(); 时,套接字不再接收任何新消息,但是当“断开连接”的用户发送消息时,服务器会收到并将其发送回所有客户”
  • “不再接收任何新消息”似乎与“服务器接收并发送回”相矛盾。
  • 发回给其他客户
  • 如果它真的表现得那样,那就是 socket.io 中的一个错误

标签: node.js sockets socket.io


【解决方案1】:

嗯,你可以看看套接字是否连接。如果套接字已连接,您可以发出数据,反之亦然。 :) 希望能帮助到你..!

YourProject.sockets.on('connection',function(socket){     
  setInterval(function(){   
    if(!socket.disconnected){
      socket.emit('entrance',{message:'Hey Bro'}); 
    }      
  },10000);        
});

【讨论】:

    【解决方案2】:

    你试过中断线程吗?这应该以异常结束所有 I/O 操作。

    【讨论】:

    • 我为什么要结束所有 I/O 操作?我想尽可能高效。
    猜你喜欢
    • 2012-05-24
    • 1970-01-01
    • 2019-03-09
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多