我正在使用node.js和socket.io构建一个小型原型。一切运行正常,我面临的唯一问题是我的node.js连接将断开连接,并且我被迫刷新页面以重新建立连接并重新运行。
有一种方法可以在断开事件触发后立即重新建立连接?
据我所知,这是一个普遍的问题。因此,我正在寻找解决该问题的最佳实践方法:)
非常感谢,丹
编辑:Socket.io已内置支持现在
当我使用socket.io时,断开连接没有发生(仅当我手动关闭服务器时)。但是您可以在例如失败10秒或发生断开事件后说几秒钟后重新连接。
socket.on('disconnect', function(){ // reconnect });
我想出了以下实现:
客户端JavaScript
var connected = false; const RETRY_INTERVAL = 10000; var timeout; socket.on('connect', function() { connected = true; clearTimeout(timeout); socket.send({'subscribe': 'schaftenaar'}); content.html("<b>Connected to server.</b>"); }); socket.on('disconnect', function() { connected = false; console.log('disconnected'); content.html("<b>Disconnected! Trying to automatically to reconnect in " + RETRY_INTERVAL/1000 + " seconds.</b>"); retryConnectOnFailure(RETRY_INTERVAL); }); var retryConnectOnFailure = function(retryInMilliseconds) { setTimeout(function() { if (!connected) { $.get('/ping', function(data) { connected = true; window.location.href = unescape(window.location.pathname); }); retryConnectOnFailure(retryInMilliseconds); } }, retryInMilliseconds); } // start connection socket.connect(); retryConnectOnFailure(RETRY_INTERVAL);
服务器端(node.js):
// express route to ping server. app.get('/ping', function(req, res) { res.send('pong'); });