Node.js 怪异的Socket.IO行为:事件“;“关于联系”;及;“断开连接时”;几乎发生在同一类型
在socket io服务器上,我有如下功能:Node.js 怪异的Socket.IO行为:事件“;“关于联系”;及;“断开连接时”;几乎发生在同一类型,node.js,websocket,socket.io,Node.js,Websocket,Socket.io,在socket io服务器上,我有如下功能: io.sockets.on('connection',function(client) { console.log(client.id + ' connected at '+(new Date()).getTime()); client.on('disconnect',function() { console.log(client.id + ' DISCONNECTED at '+(new Date()).getTim
io.sockets.on('connection',function(client) {
console.log(client.id + ' connected at '+(new Date()).getTime());
client.on('disconnect',function() {
console.log(client.id + ' DISCONNECTED at '+(new Date()).getTime());
});
});
我的问题是这种情况会发生:
debug - client authorized
info - handshake authorized 15229479751557595508
debug - setting request GET /socket.io/1/websocket/15229479751557595508
debug - set heartbeat interval for client 15229479751557595508
debug - client authorized for
debug - websocket writing 1::
15229479751557595508 connected at 1313769716321
debug - websocket received data packet 5:::{"name":"estimatepp","args":[9]}
debug - websocket received data packet 5:::{"name":"ready","args":[null]}
info - transport end
debug - set close timeout for client 15229479751557595508
debug - cleared close timeout for client 15229479751557595508
debug - cleared heartbeat interval for client 15229479751557595508
15229479751557595508 DISCONNECTED at 1313769716454
debug - discarding transport
我不知道这是否正常,但正如您所看到的,客户端15229479751557595508
在1313769716321
处连接,在1313769716454
处断开,只需133毫秒(该数字始终为132或133)。我不是命令客户在发生什么事情后断开连接
你知道为什么会这样吗
我还有一个疑问。如果我在io.sockets.on上侦听连接事件,我是否也应该在那里侦听断开连接事件?除了那里没有客户
监听断开连接的正确方法是什么
谢谢你的帮助
编辑:您可以忽略这些行
debug - websocket received data packet 5:::{"name":"estimatepp","args":[9]}
debug - websocket received data packet 5:::{"name":"ready","args":[null]}
这是我正在做的项目的一部分。也许问题是它只是接收这些事件,然后因为有一段时间没有活动,所以它关闭了连接?但这不是我们想要的行为,是吗?您发布的服务器端代码很好,应该可以正常工作。检查客户端代码中的bug(或在此处发布客户端代码)。如果没有,请尝试其他浏览器
关于您的
断开连接
事件
您有一个io.sockets.on(“connection”,function(client){…})
事件处理程序,当建立一个新连接时,将为该连接创建一个会话并存储在客户机变量中
然后将事件处理程序(如disconnect
one)附加到此client
对象
现在,当该客户端断开连接时,将调用附加到该特定客户端
对象的断开
事件处理程序
此外,正如您在中所看到的,
io.sockets.on
仅公开连接
事件。您发布的服务器端代码很好,应该可以按预期工作。检查客户端代码中的bug(或在此处发布客户端代码)。如果没有,请尝试其他浏览器
关于您的
断开连接
事件
您有一个io.sockets.on(“connection”,function(client){…})
事件处理程序,当建立一个新连接时,将为该连接创建一个会话并存储在客户机变量中
然后将事件处理程序(如disconnect
one)附加到此client
对象
现在,当该客户端断开连接时,将调用附加到该特定客户端
对象的断开
事件处理程序
此外,正如您在中所看到的,
io.sockets.on
只公开了连接
事件。作为问题的创建者,我有类似的想法
以毫秒为单位的时间可能是您到服务器的往返时间,或者管理与客户机的连接所需的时间等等。因此,我不想为时间因素操心太多
当我手动和反复刷新客户机时,我会得到相同的结果。在半秒到一秒之间。这似乎造成了一种情况,否则只能在网络质量较差的情况下发生
我可以在日志中看到,在断开与相同socket.id的连接之前,我获得了连接。连接的客户端:qEcxQQCivSyKJVbF85dc 客户端已断开连接:qEcxQQCivSyKJVbF85dc 但是,在这种情况下,我的on.disconnect事件不会触发 在断开连接时,我清理了连接的客户端的本地对象,我可以看到我有一个客户端留在那里,当我分析socket.connected状态时,它已断开连接 因此,在某些情况下,上述场景会导致断开连接事件不会触发 可能是由于时间、异步、网络质量等原因 有两条路要走
我个人赞成选择1。而是创建一个垃圾收集器,当客户端断开连接时,它会清理我的本地客户端阵列 我和这个问题的创造者有着相似的想法 以毫秒为单位的时间可能是您到服务器的往返时间,或者管理与客户机的连接所需的时间等等。因此,我不想为时间因素操心太多 当我手动和反复刷新客户机时,我会得到相同的结果。在半秒到一秒之间。这似乎造成了一种情况,否则只能在网络质量较差的情况下发生 我可以在日志中看到,在断开与相同socket.id的连接之前,我获得了连接。
连接的客户端:qEcxQQCivSyKJVbF85dc 客户端已断开连接:qEcxQQCivSyKJVbF85dc 但是,在这种情况下,我的on.disconnect事件不会触发 在断开连接时,我清理了连接的客户端的本地对象,我可以看到我有一个客户端留在那里,当我分析socket.connected状态时,它已断开连接 因此,在某些情况下,上述场景会导致断开连接事件不会触发 可能是由于时间、异步、网络质量等原因 有两条路要走