Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/javascript/448.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Javascript NodeJ在一个端口上运行两个应用程序_Javascript_Node.js_Process_Failover - Fatal编程技术网

Javascript NodeJ在一个端口上运行两个应用程序

Javascript NodeJ在一个端口上运行两个应用程序,javascript,node.js,process,failover,Javascript,Node.js,Process,Failover,为了减少应用程序长时间重启造成的停机时间,我想到了以下方法: 端口80上的主应用程序#1 端口80上的故障转移应用程序#2也存在,但只有在应用程序#1不工作的情况下才能回答请求 让应用程序2为活跃用户提供“维护”信息 在同一端口上运行两个进程最终会出现错误:EADDRINUSE——因此简单的方法不起作用。我偶然发现了服务器。在('error')事件中,我决定让App#2等待App#1停止,以便端口可用: function tryPitchIn(){ var server = http.

为了减少应用程序长时间重启造成的停机时间,我想到了以下方法:

  • 端口80上的主应用程序#1
  • 端口80上的故障转移应用程序#2也存在,但只有在应用程序#1不工作的情况下才能回答请求
  • 让应用程序2为活跃用户提供“维护”信息
  • 在同一端口上运行两个进程最终会出现
    错误:EADDRINUSE
    ——因此简单的方法不起作用。我偶然发现了
    服务器。在('error')
    事件中,我决定让App#2等待App#1停止,以便端口可用:

    function tryPitchIn(){
         var server = http.createServer(app);
    
         server.on('listening', function(){
            console.log('Application #1 crashed/ended');
            console.log('Pitching in...');
         });
    
         server.on('error', function(){
            console.log('noting to do');
            setTimeout(tryPitchIn, 250);
         });
    
         server.listen(80);
    }
    
    tryPitchIn();
    
    尽管上面的方法非常有效,但我不得不在App#1的初始化上结束App#2,这在不同的操作系统上并不容易


    是否可以给一个节点进程(由npm start启动)一个静态ID,以便从另一个进程(最好是跨操作系统)终止它?或者其他方案?

    您可以在另一个端口上为您的应用程序1提供服务,并编写一个微应用程序来代理对它的请求,如果对应用程序1的请求失败,则返回其他内容。您可以使用node http proxy like,也可以使用自己的解决方案like,只需添加一个“on error”子句。

    您可以在另一个端口上为您的应用程序1提供服务,并编写一个微应用程序来代理对它的请求,如果对应用程序1的请求失败,则返回其他内容。您可以使用node-http-proxy-like,也可以使用自己的解决方案like,只需添加一个“on-error”子句。

    我喜欢Amadan的答案。除此之外,我还必须指出,除了登录
    .On('error')
    (以及
    unchaughtException
    )之外,不建议执行其他操作。系统可能处于不稳定状态(例如,模块的内部状态可能不一致),您不希望这样长时间运行


    要么照Amadan说的做,要么使用node.js域,要么在负载平衡器后面使用几个进程(这基本上就是Amadan说的)。

    我喜欢Amadan的答案。除此之外,我还必须指出,除了登录
    .On('error')
    (以及
    unchaughtException
    )之外,不建议执行其他操作。系统可能处于不稳定状态(例如,模块的内部状态可能不一致),您不希望这样长时间运行


    要么照Amadan说的做,要么使用node.js域,要么在负载平衡器后面使用几个进程(这基本上就是Amadan说的)。

    我不想重新启动它,我只想为当前活动用户提供一个“我们正在维护我们的服务”页面!(我需要在应用程序更新时重新启动服务器,这可能需要几秒钟来构建公共LIB等)将应用程序反向代理到Nginx之类的东西后面是一种有效(且常见)的策略。我不想重新启动它,我只想为当前活动的用户提供一个“我们正在维护我们的服务”页面!(我需要在应用程序更新时重新启动服务器,这可能需要几秒钟来构建公共libs等)在Nginx之类的东西后面反向代理应用程序是一种有效(且常见)的策略。