Javascript Node.js Socket.io错误:连接后触发断开事件 在服务器上,断开连接事件在网络连接后触发 已删除,客户端将重新连接

Javascript Node.js Socket.io错误:连接后触发断开事件 在服务器上,断开连接事件在网络连接后触发 已删除,客户端将重新连接,javascript,node.js,sockets,express,socket.io,Javascript,Node.js,Sockets,Express,Socket.io,客户端代码: //重新连接事件 socket.on('reconnect', function (nr) { console.log('reconnected, nr: ', nr); }); socket.on('connect', function () { console.log('connected'); }); socket.on('disconnect', function () { console.log('disconnected'); }); //

客户端代码:

//重新连接事件

socket.on('reconnect', function (nr) {
    console.log('reconnected, nr: ', nr);
});
socket.on('connect', function () {
    console.log('connected');
});
socket.on('disconnect', function () {
    console.log('disconnected');
});
//连接事件

socket.on('reconnect', function (nr) {
    console.log('reconnected, nr: ', nr);
});
socket.on('connect', function () {
    console.log('connected');
});
socket.on('disconnect', function () {
    console.log('disconnected');
});
//断开事件

socket.on('reconnect', function (nr) {
    console.log('reconnected, nr: ', nr);
});
socket.on('connect', function () {
    console.log('connected');
});
socket.on('disconnect', function () {
    console.log('disconnected');
});
服务器代码:

-如果客户端重新连接,服务器上的结果: >客户端连接 >客户端断开连接 有人能给我解释一下为什么会这样吗?
连接处于活动状态时,客户端和服务器交换心跳消息。当服务器停止接收这些消息时,它将声明客户端已断开连接。客户端也可以显式断开连接

但你所经历的可能是第一例。客户端具有重试逻辑,因此每当断开连接时,它都会尝试重新连接。我不知道为什么会发生这种情况,您可能需要查看浏览器控制台中的“网络”选项卡,以查看请求/响应级别发生了什么

参考:


您确定
客户端断开连接的
客户端连接的
文本来自同一套接字/连接吗?也许第一个是从以前的连接,它只是提供给你比新连接的信息晚一点


尝试生成一些ID号并将其添加到连接/套接字,并将其与信息消息一起输出到控制台。

是否尝试重新连接?或者只是断开连接,就这样?重新连接时,新客户端连接,旧客户端断开,id号不同…所以一切正常。你得到了正确的事件。只是它们的交付顺序与人们想象的不同。但这也没关系-你不应该依赖于来自不同来源的异步事件的顺序。我正在开发一个聊天应用程序,因此如果触发断开连接事件,用户将从用户列表中删除。。。它重新连接和断开…但这很正常,不是吗?从服务器的角度来看,您无法知道客户端是否正在重新连接。重新连接意味着将创建新连接。您可以尝试使用某些用户ID标记连接,将已连接用户的列表保留在某个位置,然后在断开连接事件中,检查用户是否仍通过其他套接字连接。这样,如果“已连接”发生在“已断开”之前,例如,您将拥有类似于
user.connections
的值等于2,而在“已断开”之后,它将变为1。只有在它变为0后,您才会假定该用户已断开连接并将其从列表中删除。