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 开发工具)

C# socket 如何断开连接

如何使用 Amphp 捕获 php websocket 断开的 TCP 连接异常?

如何在WebSocket的服务器侧检测客户端的断开连接