WebSocket断开连接时如何重新连接?
Posted
技术标签:
【中文标题】WebSocket断开连接时如何重新连接?【英文标题】:How to reconnect when a WebSocket disconnects? 【发布时间】:2014-07-30 21:34:48 【问题描述】:例子:
var WebSocket = require('ws');
var ws = new WebSocket('ws://echo.websocket.org/', protocolVersion: 8, origin: 'http://websocket.org');
ws.on('open', function()
console.log('connected');
ws.send(Date.now().toString(), mask: true);
);
ws.on('close', function()
console.log('disconnected');
// What do I do here to reconnect?
);
socket关闭重新连接服务器时该怎么办?
【问题讨论】:
如果我没记错的话,套接字会在断开连接时尝试重新连接 @SterlingArcher 不幸的是,它实际上并没有这样做 一个强大的解决方案并不算太糟糕,但也不完全是一个 5 行补丁。这是一个解决方案。 github.com/joewalnes/reconnecting-websocket/blob/master/… @aembke: joewalnes 的项目已经使用abandoned 一年多了,目前还不清楚它是针对节点还是浏览器。 重复NodeJS Websocket how to reconnect when server restarts 【参考方案1】:您可以将所有设置包装在一个函数中,然后从关闭处理程序中调用它:
var WebSocket = require('ws');
var openWebSocket = function()
var ws = new WebSocket('ws://echo.websocket.org/', protocolVersion: 8, origin: 'http://websocket.org');
ws.on('open', function()
console.log('connected');
ws.send(Date.now().toString(), mask: true);
);
ws.on('close', function()
console.log('disconnected');
openWebSocket();
);
openWebSocket();
但是,这里可能需要更多逻辑(如果 close
是故意的怎么办?如果您在重新连接时尝试发送消息会发生什么?)。你可能最好使用图书馆。 aembke 在 cmets 中建议的 This library 似乎是合理的。 socket.io 是一个不错的选择(它为您提供了非 WebSocket 传输)。
【讨论】:
以上是关于WebSocket断开连接时如何重新连接?的主要内容,如果未能解决你的问题,请参考以下文章
如何在 apollo 客户端中检测订阅(websocket)的断开和重新连接
如何使用 OkHttpClient 真正断开与 WebSocket 的连接?
如何手动模拟 websocket 断开连接? (Firefox 或 Chrome 开发工具)