www*_*ser 15 websocket node.js
在Node.js中,我使用websockets/ws进行WebSocket连接.以下是客户端的代码.假设我们连接的服务器套接字停机了一分钟.close事件将触发,但是每当服务器上的套接字出现故障或错误时,重新连接到套接字的最佳方法是什么?
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?
});
Run Code Online (Sandbox Code Playgroud)
Joh*_*nry 30
试试这个:
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();
Run Code Online (Sandbox Code Playgroud)
您可以使用原始实现而无需包装它.
Tre*_*xon 12
我已成功使用https://github.com/joewalnes/reconnecting-websocket/blob/master/reconnecting-websocket.js.
你应该能够做到:
ws = new ReconnectingWebSocket('ws://....');
ws.reconnectInterval = 60000; // try to reconnect after 10 seconds
Run Code Online (Sandbox Code Playgroud)
使用 async-await 如果 Socket 关闭或服务器上发生任何错误,客户端将永远尝试每 5 秒自动连接一次
const ws = require('ws')
let openedSocketFlag = null
const timeInterval = 5000
const port = 3000
const url = `ws://localhost:${port}`
function connect() {
const client = new ws(url)
return new Promise((resolve, reject) => {
console.log('client try to connect...')
client.on('open', () => {
console.log('WEBSOCKET_OPEN: client connected to server at port %s', port)
openedSocketFlag = true
resolve(openedSocketFlag)
})
client.on('message', (data) => {
console.log(data.toString())
})
client.on('close', (err) => {
console.log('WEBSOCKET_CLOSE: connection closed %o', err)
openedSocketFlag = false
reject(err)
})
client.on('error', (err) => {
console.log('WEBSOCKET_ERROR: Error', new Error(err.message))
openedSocketFlag = false
reject(err)
})
})
}
async function reconnect() {
try {
await connect()
} catch (err) {
console.log('WEBSOCKET_RECONNECT: Error', new Error(err).message)
}
}
reconnect()
// repeat every 5 seconds
setInterval(() => {
if (!openedSocketFlag) {
reconnect()
}
}, timeInterval)
Run Code Online (Sandbox Code Playgroud)
重新连接到断开连接的Web套接字并非易事,最好委托给库.目前用于此目的的最小且最活跃的库是reconnecting-websocket,它从另一个答案中淘汰了joewalnes的库.特别是对于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: ...,
});
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
17029 次 |
| 最近记录: |