如何在Socket IO中检测重新连接事件

8
每当一个客户端连接时,我都会使用socket.id为该客户端分配一个id,并在服务器上维护此id以备将来参考。我现在遇到的问题是关于断开/重新连接。我甚至不知道如何模拟这种情况,因为如果我重新加载客户端页面,它在技术上会创建一个新的客户端并使用不同的id连接到服务器。如果我手动断开并重新连接客户端,则客户端将再次具有不同的id(socket.id)。
我在客户端和服务器上都设置了'reconnect'事件,使用socket.on('reconnect',function(){...}),但是根据我尝试过的内容,它似乎从未被调用过。
那么,您会如何模拟这种情况?然后,检测这个新的客户端是否实际上是已经断开的同一个客户端,最好的方法是什么?

1
我已经在这里回答了这个问题:https://dev59.com/LWIj5IYBdhLWcg3wcEuI#20261163 - Are
谢谢。我实际上已经考虑过这个解决方案,即发出一个额外的事件来设置/识别客户端/服务器的customID。我相信这应该可以解决我的问题。只是我想知道是否可以在重新连接事件上做些什么,看看它是否提供了其他解决方案。 - rustyengineer
socket.io 中没有 reconnect 事件,我相信当你可以自己实现它时,你不需要它 :) - Are
好的,我在客户端API中看到它被列为事件之一,所以只是想知道一下 : )。谢谢。 - rustyengineer
根据客户端文档,客户端套接字上有一个reconnect事件(滚动到该文档页面底部)。 - jfriend00
1个回答

9
客户端有一个重新连接的事件,在此事件中,您可以向服务器发出信号,并找到重新连接的客户端。
socket.on('reconnect', function () {
    console.log('you have been reconnected');
    // where username is a global variable for the client
    socket.emit('user-reconnected', username);
});

在服务器上,您可以这样获得此内容:
socket.on('user-reconnected', function (username) {
     console.log(username + ' just reconnected');
});

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接