我在Socket.io中与服务器和客户端聊天。客户端向服务器发送消息/从服务器接收消息。为了测试断开连接事件,我拔出了以太网插头,并在几秒钟后重新连接。
此后,从客户端发送消息仍然可以正常工作,并且断开连接期间以前发送的所有消息都可以在Chrome和Firefox上成功重新发送。
对于接收来说,对于Chrome来说可以,但是对于不再接收来自服务器的消息的Firefox来说可以。
问题是我该怎么做才能正确处理此类网络问题并使聊天稳定?
答案 0 :(得分:2)
如文档中所述,就像您说的那样,套接字应正常重新连接自身。由于您可以发送消息,因此似乎您已重新连接一半。
有几个事件值得您添加,以查看是否有异常:reconnecting
,reconnect_attempt
,reconnect
,{{1} }和reconnect_error
。
如果没有任何反应,我建议您做的是检查您的客户端是否发生断开连接事件并重新调用connect函数,以便在网络重新建立后获得一个全新的套接字:
reconnect_failed
根据过去的经验,套接字对象中存储了一些脏状态,可以解释您的问题,因此从干净的状态开始是值得的。
请注意那些不需要socket-io客户端的人,还有一个小库可以做到这一点,可以优雅地重新连接,以防您的网络掉线,也应该与socket-io后端一起使用,{{3 }}。
答案 1 :(得分:0)
我终于找到了问题的根源。 Socket.io确实可以直接重新连接,因此您无需尝试重新连接。但是,成功重新连接后,套接字似乎并没有重新加入同一房间。我设法解决了这样的问题:
socket.on('reconnect', () => {
socket.emit('onEnter', data);
});
这里onEnter
事件用于使服务器将我加入会议室。
但是我不明白为什么它也不能保留房间。