gpt4 book ai didi

javascript - 在 NodeJS 中,如何与另一台可能已关闭的服务器重新建立套接字连接?

转载 作者:行者123 更新时间:2023-12-02 15:41:59 25 4
gpt4 key购买 nike

因此,我有一个 Express NodeJS 服务器,它通过升级的 WebSocket uri 与另一个应用程序建立连接以获取数据。如果这个应用程序出现故障,那么显然 WebSocket 连接就会关闭。应用程序重新上线后,我需要重新连接此 uri。

我的第一个方法是在 socket.onclose 函数中使用 while 循环,以便在应用程序重新上线后继续尝试重新连接,但这似乎没有按计划进行。我的代码如下所示:

socket.onclose = function(){
while(socket.readyState != 1){
try{
socket = new WebSocket("URI");
console.log("connection status: " + socket.readyState);
}
catch(err) {
//send message to console
}
}
};

即使在 URI 访问的应用重新上线后,这种方法仍然会导致 socket.readyState 为 0。

我采取的另一种方法是使用 JavaScript setTimout 函数来尝试通过指数退避算法建立连接。使用这种方法,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);
};

此尝试的问题是,如果尝试套接字连接时应用程序仍然处于离线状态,出于显而易见的原因,我会收到以下错误,并且 Node 脚本终止:

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 Node 模块来确保我的 Node 脚本始终运行并确保它在意外退出后重新启动。尽管我使用的是forever,但在几次重新启动后,forever 无论如何都会停止脚本。

我基本上只是在寻找一种方法,使我的 NodeJS 服务器更加健壮,并自动重新连接另一台可能因某种原因而停机的服务器,而不必手动重新启动 Node 脚本。

我的尝试完全没有根据吗?当谈到 NodeJS 时,我是一个菜鸟,所以它甚至可能是我忽略的一些愚蠢的东西,但我已经研究了一天左右,我的所有尝试似乎都没有按计划进行。

如有任何建议,我们将不胜感激!谢谢!

最佳答案

一些建议

1) 开始使用域来防止您的应用程序意外终止。即您的应用程序将在域下运行(域的运行方法)。您可以实现一些警报机制,例如电子邮件或短信,当发生任何错误时将发出通知。

2) 开始使用 socket.io对于 websocket 通信,它会自动处理重新连接。 Socket.io 使用 keep-alive 心跳并不断从服务器轮询。

3) 开始使用 pm2而不是永远。 Pm2 允许对您的应用程序进行集群,从而提高性能。

我认为这可能会提高您应用的性能、稳定性和健壮性。

关于javascript - 在 NodeJS 中,如何与另一台可能已关闭的服务器重新建立套接字连接?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/32483739/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com