【发布时间】: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#L290
socket.disconnect()看起来不错。 -
正如我所说,“当我在套接字上运行 socket.disconnect(); 时,套接字不再接收任何新消息,但是当“断开连接”的用户发送消息时,服务器会收到并将其发送回所有客户”
-
“不再接收任何新消息”似乎与“服务器接收并发送回”相矛盾。
-
发回给其他客户
-
如果它真的表现得那样,那就是 socket.io 中的一个错误