我今天突然想到一个问题,如果使用nginx 作为nodejs 的代理服务器,那么如果nodejs的应用需要进行升级的话,如何实现热更新。
第一种办法:使用nodejs搭建一个代理服务器,通过对请求的监听来判断当前的nodejs服务实例的工作情况(有多少未处理完的请求)来过滤请求,比如我有三个服务实例,1,2,3,我现在想进行升级,需要对服务进行重启,但是三个实例不能同时重启,这个时候,就需要这个代理服务器进行一个判定,通过这个代理服务器,可以看到每个实例当前的在处理的请求数量,同时也可以指定哪个进程进行断后,哪些 进程进行挂断,当然挂断的步骤是:先由代理服务器切断请求,不在给该进程发送新的请求,同时,代理服务器随时监听这些被“判死刑”的进程的请求数量的数量,如果没有请求的挂起,那就重启。当这些进程重启完成以后,这个断后的进程按照以上的步骤进行重启。 代理服务器的核心代码如下。
var http = require('http'),
httpProxy = require('http-proxy');
//
// Create a proxy server with latency
//
var proxy = httpProxy.createProxyServer();
var reqNum = 0; // 缓存目前请求的数量
proxy.on("proxyRes",()=>{
reqNum --;
console.log("完成一个请求,当前的剩余的请求数量是 "+reqNum);
})
proxy.on("proxy