NodeJS Websocket当服务器重新启动时如何重新连接
在Node.js中,我使用websockets/ws进行WebSocket连接。以下是客户端的代码。假设我们正在连接的服务器套接字关闭一分钟。关闭事件会触发,但是当服务器上的套接字发生故障或错误时,重新连接套接字的最佳方式是什么?NodeJS Websocket当服务器重新启动时如何重新连接
var ws = new WebSocket('ws://localhost');
ws.on('open', function() {
console.log('socket open');
});
ws.on('error', function() {
console.log('socket error');
// how do I reconnect to the ws after x minutes here?
});
ws.on('close', function() {
console.log('socket close');
// how do I reconnect to the ws after x minutes here?
});
我已使用https://github.com/joewalnes/reconnecting-websocket/blob/master/reconnecting-websocket.js成功。
你应该能够做到:
ws = new ReconnectingWebSocket('ws://....');
ws.reconnectInterval = 60000; // try to reconnect after 10 seconds
试试这个:
var reconnectInterval = x * 1000 * 60;
var ws;
var connect = function(){
ws = new WebSocket('ws://localhost');
ws.on('open', function() {
console.log('socket open');
});
ws.on('error', function() {
console.log('socket error');
});
ws.on('close', function() {
console.log('socket close');
setTimeout(connect, reconnectInterval);
});
};
connect();
你得到使用原来的实现,而不必把它包起来。
关闭总是在错误后被调用。这会在出现错误时调用连接两次。 –
@DustinGraham你是绝对正确的。这是否会使简单地删除错误的回调?如果我没有及时回复,请随时自行编辑答案。 –
2018-JAN更新
重新连接到一个断开网络插座non-trivial, and best delegated to a library。目前为此目的最小和最积极维护的库是reconnecting-websocket,其中obsoletes joewalnes's library来自其他答案。具体来说,对于Node.js,您需要传递一个构造函数,如WebSocket:
import WebSocket from 'ws';
import ReconnectingWebSocket from 'reconnecting-websocket';
const ws = new ReconnectingWebSocket('wss://some-feed.com', [], {
constructor: WebSocket,
connectionTimeout: ..., // in milliseconds
reconnectInterval: ...,
});
有趣。我会研究它,但我更喜欢使用einaros的ws。 – wwwuser
这是一个客户端库。您仍然可以在服务器上使用einaros库。 –
哎呀,我明白发生了什么事。您正在通过node.js连接到websocket。这仍然可能有所帮助。你可以用它来包装einaros WebSocket。 –