修改网站自动关闭时间timeout_Node.JS实战30:自动重启服务器

如果用nodejs做服务器,很多情况下,是需要自动重启功能的。

4001805bebc7ecca6297af430c7571b6.png

比如:

场景1、当文件被修改时自动重启服务器。

这里的文件,可能是服务器主程序,比如修改了程序,也可以是其它依赖文件等。

例程:

两个文件,server.js是服务器文件。test30.js,用于启动监测server.js,当server.js文件内容发生变化时,自动重启之。

server.js:

require("http").createServer(function(req,res){    res.end("test");}).listen(8000);

test30.js:

var fs = require("fs");var exec  = require("child_process").exec;function watch(){     var child = exec("node server.js");     var watcher = fs.watch(__dirname + "/server.js",function(event){        console.log("file changed,reload");        child.kill();        watcher.close();        watch();     })}watch();

执行效果:

3b55889454a3838ce5a4f98de1e94c64.png

场景2、高稳定性需求,做为服务器程序的守护进程,当发现服务器意外终止时,重启之。

比如,ShareWAF(ShareWAF.com)就可以用守护进程启动,守护进程每10秒与ShareWAF主进程通信一次,万一发现ShareWAF没有回应,就重启它。

守护进程代码:

/* * ShareWAF 守护进程 * 功能:检测ShareWAF工作是否正常,如出现异常:无法访问,则对其进行重启 * 本程序可以用forever启动,防止本进程出异常退出,达到双重守护效果 */process.env.UV_THREADPOOL_SIZE = 128;const { exec } = require('child_process');/* * 启动ShareWAF */function start_sharewaf(){  exec('forever start sharewaf.js', (error, stdout, stderr) => {    if (error) {      console.error(`exec error: ${error}`);      return;    }    console.log(`stdout: ${stdout}`);    console.log(`stderr: ${stderr}`);  });}/* * 关闭ShareWAF */function stop_sharewaf(){  exec('forever stop sharewaf.js', (error, stdout, stderr) => {    if (error) {      console.error(`exec error: ${error}`);      return;    }    console.log(`stdout: ${stdout}`);    console.log(`stderr: ${stderr}`);  });}//启动ShareWAFstart_sharewaf();var request = require('request');//sharewaf地址和端口var sharewaf_host = "http://127.0.0.1:" + require('./config.js').shield_port + "/";console.log("sharewaf address:",sharewaf_host);//10秒检测一次sharewaf服务是否正常setInterval(function(){    //访问sharewaf  request.get(sharewaf_host, {timeout: 5000}, function(err) {    if (err != null){      if(err.code == 'ETIMEDOUT' || err.code =='ECONNREFUSED' || err.code=='ESOCKETTIMEDOUT'){        //重启sharewaf        stop_sharewaf();        start_sharewaf();      }else{        console.log("Error:",err.code);      }    }  }); }, 10000);

注:因为ShareWAF是WAF(Web应用防火墙),WAF是需要高稳定性的。

执行效果:

46a360a41e4105747763c373ce453123.png

ShareWAF的高稳定性,除了用子进程监测方式,本身还使用了三方模块forever,

forever(https://www.npmjs.com/package/forever)也具有同本代码所示一样的效果,如果用forever启动的程序意外中止,也会被自动重启。

668c8a6ba25fd240f6d5ac77db624a98.png

更多本系列文章:

Node.JS实战29:在浏览器端使用Node模块

Node.JS实战28:在Node中使用DOM

Node.JS实战27:同步执行的子进程

Node.JS实战26:强大的工作池。收藏吧!你一定会用的到

Node.JS实战25:重要!大运算量?用Fork、让子进程来做

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值