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

Shantastic先生

因此,我有一个Express NodeJS服务器,该服务器正在通过升级的WebSocket uri与另一个应用程序建立连接以进行数据馈送。如果此应用程序出现故障,则显然WebSocket连接将关闭。应用重新上线后,我需要重新连接此uri。

我的第一种方法是whilesocket.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来说,我是一个菜鸟,所以我什至可能忽略了它,但是现在我已经进行了一天左右的研究,而我的所有尝试似乎都没有按计划进行。

任何建议将不胜感激!谢谢!

Hitesh chapanera

很少的建议

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

2)开始使用socket.io进行websocket通信,它将自动处理重新连接。Socket.io使用保持活动的心跳并持续从服务器轮询。

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

我认为这可以改善您应用的性能,稳定性和鲁棒性。

本文收集自互联网,转载请注明来源。

如有侵权,请联系[email protected] 删除。

编辑于
0

我来说两句

0条评论
登录后参与评论

相关文章

来自分类Dev

在Heroku中,我如何从另一台服务器连接PostgreSQL?

来自分类Dev

NodeJS连接到另一台服务器上的wss

来自分类Dev

如何连接在另一台服务器上运行的网络

来自分类Dev

如何监视另一台服务器中存在的文件

来自分类Dev

如何将数据发送到另一台服务器并通过套接字保存响应

来自分类Dev

如何使用nodejs将客户端/用户从一台服务器反向代理到另一台服务器?

来自分类Dev

如何连接到另一台服务器后面的SSH服务器?

来自分类Dev

一台如何根据子域名将流量从一台服务器重定向到另一台服务器?

来自分类Dev

如何将连接从Nginx传递到另一台服务器(反向代理?)

来自分类Dev

Anaconda连接到从另一台服务器创建的环境

来自分类Dev

带有Grunt的AngularJS-连接到另一台服务器

来自分类Dev

我无法从另一台服务器连接到反向 SSH

来自分类Dev

到另一台服务器中的远程DB2 db的连接字符串

来自分类Dev

PHP 从另一台服务器执行 nodejs

来自分类Dev

nodejs找不到模块,只能在一台服务器上工作,而不能在另一台服务器上工作

来自分类Dev

如何使用post方法重定向到mvc中的另一台服务器?

来自分类Dev

如何通过传入的http呼叫传递到dart中的另一台服务器?

来自分类Dev

如何将HttpRequestMessage转发到另一台服务器

来自分类Dev

如何访问另一台服务器的敏感事实?

来自分类Dev

我们如何通过另一台服务器路由Youtube?

来自分类Dev

如何使用Celery从另一台服务器运行任务?

来自分类Dev

如何通过另一台服务器使用scp复制文件

来自分类Dev

如何通过另一台服务器发送 SMTP 电子邮件?

来自分类Dev

如何将图像从网站保存到另一台服务器

来自分类Dev

如何将值发送到另一台服务器?

来自分类Dev

apache - 如何重定向到另一台服务器

来自分类Dev

从ASP.NET中的另一台服务器上载文件

来自分类Dev

一台服务器,另一台PC上的多个网站

来自分类Dev

从另一台服务器连接到AWS服务器上的MongoDB

Related 相关文章

  1. 1

    在Heroku中,我如何从另一台服务器连接PostgreSQL?

  2. 2

    NodeJS连接到另一台服务器上的wss

  3. 3

    如何连接在另一台服务器上运行的网络

  4. 4

    如何监视另一台服务器中存在的文件

  5. 5

    如何将数据发送到另一台服务器并通过套接字保存响应

  6. 6

    如何使用nodejs将客户端/用户从一台服务器反向代理到另一台服务器?

  7. 7

    如何连接到另一台服务器后面的SSH服务器?

  8. 8

    一台如何根据子域名将流量从一台服务器重定向到另一台服务器?

  9. 9

    如何将连接从Nginx传递到另一台服务器(反向代理?)

  10. 10

    Anaconda连接到从另一台服务器创建的环境

  11. 11

    带有Grunt的AngularJS-连接到另一台服务器

  12. 12

    我无法从另一台服务器连接到反向 SSH

  13. 13

    到另一台服务器中的远程DB2 db的连接字符串

  14. 14

    PHP 从另一台服务器执行 nodejs

  15. 15

    nodejs找不到模块,只能在一台服务器上工作,而不能在另一台服务器上工作

  16. 16

    如何使用post方法重定向到mvc中的另一台服务器?

  17. 17

    如何通过传入的http呼叫传递到dart中的另一台服务器?

  18. 18

    如何将HttpRequestMessage转发到另一台服务器

  19. 19

    如何访问另一台服务器的敏感事实?

  20. 20

    我们如何通过另一台服务器路由Youtube?

  21. 21

    如何使用Celery从另一台服务器运行任务?

  22. 22

    如何通过另一台服务器使用scp复制文件

  23. 23

    如何通过另一台服务器发送 SMTP 电子邮件?

  24. 24

    如何将图像从网站保存到另一台服务器

  25. 25

    如何将值发送到另一台服务器?

  26. 26

    apache - 如何重定向到另一台服务器

  27. 27

    从ASP.NET中的另一台服务器上载文件

  28. 28

    一台服务器,另一台PC上的多个网站

  29. 29

    从另一台服务器连接到AWS服务器上的MongoDB

热门标签

归档