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 错误
我们可以在 Node JS 应用程序中使用带有 ejs(嵌入式 javascript)的 socket.io 而不是 html 页面吗?