Javascript 为什么手动重新连接Socket.IO时不触发重新连接功能

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

当节点服务器使用套接字断开客户端连接时。断开连接(true)我使用
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如果您要说什么,我希望您直接出来说出来。“你本来可以留下解释的。”我在第一次评论中确实解释过。