因此,我有一个Express NodeJS服务器,该服务器正在通过升级的WebSocket uri与另一个应用程序建立连接以进行数据馈送。如果此应用程序出现故障,则显然WebSocket连接将关闭。应用重新上线后,我需要重新连接此uri。
我的第一种方法是while
在socket.onclose
函数中使用循环,以在应用程序重新联机后继续尝试进行重新连接,但这似乎并未按计划进行。我的代码如下所示:
socket.onclose = function(){
while(socket.readyState != 1){
try{
socket = new WebSocket("URI");
console.log("connection status: " + socket.readyState);
}
catch(err) {
//send message to console
}
}
};
socket.readyState
即使我正在访问URI的应用重新回到在线状态后,这种方法仍会给我0的值。
我采用的另一种方法是使用JavaScriptsetTimout
函数来尝试通过使用指数退避算法来建立连接。使用这种方法,我在socket.onclose
函数中的代码如下所示:
socket.onclose = function(){
var time = generateInterval(reconnAttempts); //generateInterval generates the random time based on the exponential backoff algorithm
setTimeout(function(){
reconnAttempts++; //another attempt so increment reconnAttempts
socket = new WebSocket("URI");
}, time);
};
这种尝试的问题在于,如果尝试进行套接字连接时应用仍处于脱机状态,则由于明显的原因,我会收到以下错误,并且节点脚本终止:
events.js:85
throw er; // Unhandled 'error' event
Error: connect ECONNREFUSED
at exports._errnoException (util.js:746:11)
at TCPConnectWrap.afterConnect [as oncomplete] (net.js:1010:19)
我还开始使用forever
节点模块,以确保节点脚本始终处于运行状态,并确保在意外退出后重新启动它。即使我正在使用forever
,在重新启动几次后,forever
仍然要停止脚本。
我基本上只是在寻找一种使我的NodeJS服务器更强大并自动与可能由于某种原因而关闭的其他服务器重新连接的方法,而不必手动重新启动节点脚本。
我的尝试会完全脱离基地吗?对于NodeJS来说,我是一个菜鸟,所以我什至可能忽略了它,但是现在我已经进行了一天左右的研究,而我的所有尝试似乎都没有按计划进行。
任何建议将不胜感激!谢谢!
本文收集自互联网,转载请注明来源。
如有侵权,请联系[email protected] 删除。
我来说两句