socket.io javascript客户端在重新启动服务器后无法重新连接

Posted

技术标签:

【中文标题】socket.io javascript客户端在重新启动服务器后无法重新连接【英文标题】:socket.io javascript client fails to reconnect after restarting server 【发布时间】:2016-08-16 09:21:22 【问题描述】:

我正在使用“socket.io”:“1.4.5”,“socket.io-redis”:“1.0.0”。使用 socket-io-client 的 javascript 客户端似乎很高兴地连接到服务器,除非服务器重新启动。连接尝试失败触发 'connect_error' 事件,消息为 '"message":"xhr poll error", "type":"TransportError","description":0"'。如果我通过浏览器重新启动连接工作正常。我还注意到,如果我在事件处理程序中为“connect_error”设置断点并等待几秒钟,连接尝试最终会成功。我在客户端代码中遗漏了一些配置设置?这是我的客户端代码

var socketConnectParams = 'max reconnection attempts': 150;  
    socketConnectParams['reconnection'] = true;
    socketConnectParams['reconnectionDelay'] = 5000;
    socketConnectParams['reconnectionDelayMax'] = 15000;
    var socket = io('http://localhost:8888', socketConnectParams);

    socket.on('connect', function ()  );

    socket.on('connect_error', function(error) 
      dLog("connection error event received." + JSON.stringify(error));
    );

【问题讨论】:

【参考方案1】:

我侦听“断开连接”事件以重新绑定新的“连接”事件。这样,如果您的服务器重新启动,本地客户端将检测到这一点并创建一个新的侦听器,然后服务器再次启动。也许你可以试试。

        socket.on('disconnect', function()
            socketCleanup(); // this is a function to cleanup all listeners, just in case, so you can restart fresh
            socket.on('connect', function()
                socketConnect();
            );
        );

【讨论】:

呃,socket.io 会自动重新连接,只要它没有被选项关闭。如果客户端没有错误配置,我不知道为什么需要这样做。 在我的情况下,套接字确实重新连接了——但我必须重置连接时发生的所有配置、消息事件(我现在不记得为什么了)。也许是因为重新连接获得了一个新的套接字 ID?我需要检查并回忆我的具体情况。 edit 我认为这是因为原来的套接字订阅了一个房间,而新的 socked 会丢失它,需要重新订阅。 -- 我真的需要调查一下,对不起。

以上是关于socket.io javascript客户端在重新启动服务器后无法重新连接的主要内容,如果未能解决你的问题,请参考以下文章

javascript 中的 Socket.io 给出 NOT_RESOLVED 错误

Heroku 上的 Socket.io:客户端代码

Java socket.io 客户端

我们可以在 Node JS 应用程序中使用带有 ejs(嵌入式 javascript)的 socket.io 而不是 html 页面吗?

我们可以在Node JS应用程序中使用socket.io和ejs(嵌入式javascript)而不是html页面吗?

使用带有多个模块的 socket.io 客户端