javascript - Node.js 在一个端口上运行两个应用程序

标签 javascript node.js process failover

为了减少因长期应用程序重新启动而导致的停机时间,我想到了类似的方法:

  1. 端口 80 上的主应用 #1。
  2. 也会在端口 80 上对应用程序 #2 进行故障转移,但仅在应用程序 #1 无法工作时才应答请求。
  3. 让应用 #2 为活跃用户提供“维护”消息。

在同一端口上运行两个进程最终会出现错误:EADDRINUSE - 因此简单的方法不起作用。我偶然发现了 server.on('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,这在不同的操作系统上并不容易做到。

是否可以为 Node 进程(由 npm start 初始化)提供一个静态 ID,以从另一个进程(最好是跨操作系统)终止它?或者该场景的其他想法?

最佳答案

您可以在另一个端口上为您的应用程序 #1 提供服务,并编写一个微应用程序来代理对其的请求,并在对应用程序 #1 的请求失败时返回其他内容。您可以使用像here这样的node-http-proxy ,或者推出您自己的解决方案,例如 this并添加一个“on error”子句。

关于javascript - Node.js 在一个端口上运行两个应用程序,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/19107242/

相关文章:

javascript - Bootstrap Typeahead 只允许列表值

javascript - 如何在浏览器上使用手机麦克风录音?

c# - 在 wpf 应用程序中使用 process.start 调用另一个 wpf 应用程序

linux - Linux 中的用户 ID 和组 ID

.net - 列出进程中的 AppDomain

Javascript-Edge 浏览器- TypeError : Function expected

javascript - 无法在Windows上为redis-64添加密码

javascript - 将数据从 Node.js 流上传到 ElasticSearch 数据库

javascript - 快速验证器检查输入是否是可用选项之一

jquery - NodeJS、Express 显示来自 AJAX POST 的 HTML 页面响应