免费观看又色又爽又黄的小说免费_美女福利视频国产片_亚洲欧美精品_美国一级大黄大色毛片

node后端服務保活的實現(xiàn)

引言

創(chuàng)新互聯(lián)-專業(yè)網站定制、快速模板網站建設、高性價比介休網站開發(fā)、企業(yè)建站全套包干低至880元,成熟完善的模板庫,直接使用。一站式介休網站制作公司更省心,省錢,快速模板網站建設找我們,業(yè)務覆蓋介休地區(qū)。費用合理售后完善,10余年實體公司更值得信賴。

目前的項目中使用了node,作為一個簡單的后端服務,隨著承擔著越來越多的線上業(yè)務的服務,就要求了服務端的穩(wěn)定性,而其中最重要的一點就是服務保活。有進程終止后自動重啟的能力。

forever

forever是一個簡單的命令行工具,他能確保一個給定的腳本持續(xù)運行。forever完全基于命令行操作,在forever進程之下,創(chuàng)建node的子進程,通過monitor監(jiān)控node子進程的運行情況,一旦文件更新,或者進程掛掉,forever會自動重啟node服務器,確保應用正常運行。

所以就看一下forever的項目吧。主要的進程控制方面的代碼地址。

start方法

let child_process = require('child_process')
let spawn = child_process.spawn

Monitor.prototype.start = function (restart) {
 var self = this,
   child;

 child = this.trySpawn();

 ...
 return this;
};
Monitor.prototype.trySpawn = function () {
 var run = this.parser(this.command, this.args.slice()),
   stats;

 return spawn(run.command, run.args, this.spawnWith);
};

核心就是使用了node api 中的 spawn,創(chuàng)建子進程,這個子進程就是我們真正的需要運行的node端服務。

自動restart

父子進程的通信核心就是為了保活,主要就是監(jiān)聽了子進程,也就是需要被守護進程的exit事件

 child.on('exit', function (code, signal) {
  var spinning = Date.now() - self.ctime < self.minUptime;
  child.removeListener('message', onMessage);
  self.emit('exit:code', code, signal);

  function letChildDie() {
   self.running = false;
   self.forceStop = false;
   self.emit('exit', self, spinning);
  }

  function restartChild() {
   self.forceRestart = false;
   process.nextTick(function () {
    self.start(true);
   });
  }

  self.times++;

  if (self.forceStop || (self.times >= self.max && !self.forceRestart)
   || (spinning && typeof self.spinSleepTime !== 'number') && !self.forceRestart) {
   letChildDie();
  }
  else if (spinning) {
   setTimeout(restartChild, self.spinSleepTime);
  }
  else {
   restartChild();
  }
 });

邏輯很簡單,分別兩個場景,一個是希望子進程不要再啟動,一般就是外部控制殺死的;一個是意外退出后的重啟,此處與一個spinning值的判斷,也就是在退出后存在一個重啟的時間間隔。

父子進程通信

message事件來監(jiān)聽,用send方法來發(fā)送事件,父子進程通信就可以用做外部的控制的實現(xiàn)了。這里我們還需要注意一個細節(jié),就是node后端服務運行中會輸出很多的日志,此時放在子進程中的控制臺輸出,如果希望暴露出來就可以使用options.stdio屬性。

總結

保活的場景很多,這里可以使用forever庫來處理,配合監(jiān)控和日志功能,更好的保證線上環(huán)境的穩(wěn)定。

以上就是本文的全部內容,希望對大家的學習有所幫助,也希望大家多多支持創(chuàng)新互聯(lián)。

分享標題:node后端服務保活的實現(xiàn)
網站URL:http://m.newbst.com/article0/jegsio.html

成都網站建設公司_創(chuàng)新互聯(lián),為您提供小程序開發(fā)網站導航品牌網站制作品牌網站建設網站改版網站制作

廣告

聲明:本網站發(fā)布的內容(圖片、視頻和文字)以用戶投稿、用戶轉載內容為主,如果涉及侵權請盡快告知,我們將會在第一時間刪除。文章觀點不代表本網站立場,如需處理請聯(lián)系客服。電話:028-86922220;郵箱:631063699@qq.com。內容未經允許不得轉載,或轉載時需注明來源: 創(chuàng)新互聯(lián)

手機網站建設