从断开连接中恢复Socket.io

时间:2018-11-23 16:52:52

标签: javascript websocket socket.io

我在Socket.io中与服务器和客户端聊天。客户端向服务器发送消息/从服务器接收消息。为了测试断开连接事件,我拔出了以太网插头,并在几秒钟后重新连接。

此后,从客户端发送消息仍然可以正常工作,并且断开连接期间以前发送的所有消息都可以在Chrome和Firefox上成功重新发送。

对于接收来说,对于Chrome来说可以,但是对于不再接收来自服务器的消息的Firefox来说可以。

问题是我该怎么做才能正确处理此类网络问题并使聊天稳定?

2 个答案:

答案 0 :(得分:2)

如文档中所述,就像您说的那样,套接字正常重新连接自身。由于您可以发送消息,因此似乎您已重新连接一半。

有几个事件值得您添加,以查看是否有异常:reconnectingreconnect_attemptreconnect,{{1} }和reconnect_error

如果没有任何反应,我建议您做的是检查您的客户端是否发生断开连接事件并重新调用connect函数,以便在网络重新建立后获得一个全新的套接字:

reconnect_failed

根据过去的经验,套接字对象中存储了一些脏状态,可以解释您的问题,因此从干净的状态开始是值得的。


请注意那些不需要socket-io客户端的人,还有一个小库可以做到这一点,可以优雅地重新连接,以防您的网络掉线,也应该与socket-io后端一起使用,{{3 }}。

答案 1 :(得分:0)

我终于找到了问题的根源。 Socket.io确实可以直接重新连接,因此您无需尝试重​​新连接。但是,成功重新连接后,套接字似乎并没有重新加入同一房间。我设法解决了这样的问题:

socket.on('reconnect', () => {
  socket.emit('onEnter', data);
});

这里onEnter事件用于使服务器将我加入会议室。 但是我不明白为什么它也不能保留房间。