Javascript 为什么手动重新连接Socket.IO时不触发重新连接功能
当节点服务器使用套接字断开客户端连接时。断开连接(true)我使用Javascript 为什么手动重新连接Socket.IO时不触发重新连接功能,javascript,node.js,socket.io,Javascript,Node.js,Socket.io,当节点服务器使用套接字断开客户端连接时。断开连接(true)我使用socket.open()在客户端再次手动打开连接 问题是当触发socket.open()时,socket.on('reconnect',(attemptNumber)=>{函数不起作用。 socket.on('connect',()=>{工作正常,但我希望里面的代码只在服务器关闭连接后重新连接时执行。 为什么重新连接功能不能在手动重新连接上工作?我可以做些什么来修复或解决这个问题吗?您可以像在这个非常简单的实现中一样处理它: c
socket.open()
在客户端再次手动打开连接
问题是当触发socket.open()
时,socket.on('reconnect',(attemptNumber)=>{
函数不起作用。
socket.on('connect',()=>{
工作正常,但我希望里面的代码只在服务器关闭连接后重新连接时执行。
为什么重新连接功能不能在手动重新连接上工作?我可以做些什么来修复或解决这个问题吗?您可以像在这个非常简单的实现中一样处理它:
class SocketService {
.
.
.
static registerSocket(opts) {
socket.on('open', () => {
console.log('socket connected')
socket.onclose = (e) => {
console.log('Socket is closed. Reconnect will be attempted in 1.5 second.', e.reason);
setTimeout(() =>
/*
* Try connect again after 1.5s,
* could be improved with a while
* and a number max of retries
*/
SocketService
.registerSocket(opts)
,1500);
};
});
socket.onerror = () => {
// Handle first connection error here
};
}
}
实施这种方式,你有一些保险
第一个是确保处理重新连接逻辑,第二个是处理连接错误,因为您没有“重新连接”。您正在连接。
重新连接
事件及其关联的尝试编号
仅在套接字尝试自动重新连接时发生(因为它因各种意外事件(如服务器重新启动、网络连接丢失等)而断开连接)。当服务器强制断开套接字连接时,套接字确切地知道其断开连接的原因,并且不会尝试重新连接。因此socket.open()
始终是一种连接而不是重新连接。我必须问一下。为什么在服务器断开连接时您会自动重新连接?socket.io没有这样做是有原因的。大多数情况下,您会希望以不同的方式处理服务器强制断开连接,而不仅仅是强制另一个连接。比如服务器给您的原因是什么r断开连接?您不想基于这些原因采取不同的操作吗?服务器正在断开此人的连接,因为凭据超时。前端获取新凭据并重新连接到服务器。@gforce301如果您要说什么,我希望您直接出来说出来。“你本来可以留下解释的。”我在第一次评论中确实解释过。