nodejs 热更新和平滑无损重启

1,126 阅读1分钟

grace-server包含平滑重启和热更新的功能,使用如下:
npm
github

1、安装grace-server

npm i -g grace-server

2、在server入口文件index.js同级目录下新建grace-config.js内容如下:

module.exports = {
    entry: './index.js',                // server入口文件
    workerNum: 2,                       // cluster集群worker数量
    graceReloadOnFileChange: true,      // 监听文件修改时,进行平滑重启服务器
    reloadDelay: 1500,                  // worker重启延时,注意,在产品模式下,延时尽量大于1.5s,如果延时过小,会发生worker重启交叉,开发模式可以将性能考虑优先,发生重启交叉的情况不会有很大影响,所以可以设置小于1.5s。
    workerTimeOut: 5000                 // worker强制退出timeOut
};

3、修改server入口文件index.js,将server实例暴露出来:

module.exports = server;

4、用grace命令启动:

grace

5、运行结果

image.png
完整server代码如下:

var connect = require('connect');
var server = connect.createServer();
server.use((req, res, next) => {
    res.writeHead(200);
    res.end('Hello world');
})
server.listen(3000);
module.exports = server;

6、平滑重启:

使用

kill pid   # pid为grace的进程id

可以通过

ps -A | grep grace

查询pid

image.png
由于grace-server使用了cluster集群模式,所以会有多个进程,主进程为第一个,bin目录下的。 使用:
image.png
可以看到,当我们试图kill的时候,grace立马收到了信号并进行了平滑重启。

7、热更新

当我们command + s保存文件时:

image.png
可以看到grace立马监听到了文件变化,并进行了热更新。