最新国产好看的视频,伊人天堂AV在线,国产Aaaaaa视频,蜜臀视频在线观看一区,人妻av色图,密臀久久久精品影片,青青视频免费观看毛片,久草在线观看视,国产三级精品色情在线

node后端服務(wù)?;畹膶?shí)現(xiàn)

 更新時間:2019年11月10日 09:28:06   作者:求實(shí)亭下  
這篇文章主要介紹了node后端服務(wù)?;畹膶?shí)現(xiàn),文中通過示例代碼介紹的非常詳細(xì),對大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價值,需要的朋友們下面隨著小編來一起學(xué)習(xí)學(xué)習(xí)吧

引言

目前的項目中使用了node,作為一個簡單的后端服務(wù),隨著承擔(dān)著越來越多的線上業(yè)務(wù)的服務(wù),就要求了服務(wù)端的穩(wěn)定性,而其中最重要的一點(diǎn)就是服務(wù)?;睢S羞M(jìn)程終止后自動重啟的能力。

forever

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

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

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)建子進(jìn)程,這個子進(jìn)程就是我們真正的需要運(yùn)行的node端服務(wù)。

自動restart

父子進(jìn)程的通信核心就是為了?;睿饕褪潜O(jiān)聽了子進(jìn)程,也就是需要被守護(hù)進(jì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();
  }
 });

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

父子進(jìn)程通信

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

總結(jié)

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

以上就是本文的全部內(nèi)容,希望對大家的學(xué)習(xí)有所幫助,也希望大家多多支持腳本之家。

相關(guān)文章

  • node.js中實(shí)現(xiàn)token的生成與驗(yàn)證的操作方法

    node.js中實(shí)現(xiàn)token的生成與驗(yàn)證的操作方法

    Token是一種用于在客戶端和服務(wù)器之間安全傳輸信息的加密字符串,常用于身份驗(yàn)證、授權(quán)、狀態(tài)管理和安全性,在Node.js中,常用jsonwebtoken庫生成和驗(yàn)證Token,本文介紹node.js中實(shí)現(xiàn)token的生成與驗(yàn)證的操作方法,感興趣的朋友一起看看吧
    2025-01-01
  • nodejs利用readline提示輸入內(nèi)容實(shí)例代碼

    nodejs利用readline提示輸入內(nèi)容實(shí)例代碼

    這篇文章主要給大家介紹了關(guān)于nodejs利用readline提示輸入內(nèi)容的相關(guān)資料,Readline是Node.js里實(shí)現(xiàn)標(biāo)準(zhǔn)輸入輸出的封裝好的模塊,通過這個模塊我們可以以逐行的方式讀取數(shù)據(jù)流,需要的朋友可以參考下
    2021-07-07
  • 關(guān)于npm源查詢與切換方式

    關(guān)于npm源查詢與切換方式

    這篇文章主要介紹了關(guān)于npm源查詢與切換方式,具有很好的參考價值,希望對大家有所幫助,如有錯誤或未考慮完全的地方,望不吝賜教
    2025-03-03
  • node.js實(shí)現(xiàn)http服務(wù)器與瀏覽器之間的內(nèi)容緩存操作示例

    node.js實(shí)現(xiàn)http服務(wù)器與瀏覽器之間的內(nèi)容緩存操作示例

    這篇文章主要介紹了node.js實(shí)現(xiàn)http服務(wù)器與瀏覽器之間的內(nèi)容緩存操作,結(jié)合實(shí)例形式分析了node.js http服務(wù)器與瀏覽器之間的內(nèi)容緩存原理與具體實(shí)現(xiàn)技巧,需要的朋友可以參考下
    2020-02-02
  • Node多進(jìn)程的實(shí)現(xiàn)方法

    Node多進(jìn)程的實(shí)現(xiàn)方法

    我們都知道?Node.js?是以單線程的模式運(yùn)行的,但它使用的是事件驅(qū)動來處理并發(fā),這樣有助于我們在多核?cpu?的系統(tǒng)上創(chuàng)建多個子進(jìn)程,從而提高性能
    2022-08-08
  • 掌握Node.js中的Promise異步編程方式

    掌握Node.js中的Promise異步編程方式

    Node.js中的Promise是一種異步編程方式,可以解決回調(diào)地獄問題,提高代碼可讀性和可維護(hù)性。通過掌握Promise的使用方法,可以更好地進(jìn)行異步編程,避免一些常見的錯誤和陷阱
    2023-05-05
  • 一文教你如何使用Node進(jìn)程管理工具-pm2

    一文教你如何使用Node進(jìn)程管理工具-pm2

    這篇文章詳細(xì)介紹了如何使用node進(jìn)程管理工具pm2,文中代碼示例講解的非常詳細(xì),對大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價值,需要的朋友可以借鑒一下
    2023-04-04
  • Node.js使用定時器的三種方法

    Node.js使用定時器的三種方法

    在Node.js中使用定時器是一項常見且重要的任務(wù),本文主要介紹了Node.js使用定時器的三種方法,包括setTimeout、setInterval和setImmediate等方法,感興趣的可以了解一下
    2024-02-02
  • Node.js原理阻塞和EventEmitter及其繼承的運(yùn)用實(shí)戰(zhàn)

    Node.js原理阻塞和EventEmitter及其繼承的運(yùn)用實(shí)戰(zhàn)

    這篇文章主要介紹了Node.js原理阻塞和EventEmitter及其繼承的運(yùn)用實(shí)戰(zhàn),文章圍繞主題展開詳細(xì)的內(nèi)容介紹,具有一定的參考價值,需要的小伙伴可以參考一下
    2022-08-08
  • npm?install?XXX安裝路徑文件夾權(quán)限問題的解決過程

    npm?install?XXX安裝路徑文件夾權(quán)限問題的解決過程

    這篇文章主要給大家介紹了關(guān)于npm?install?XXX安裝路徑文件夾權(quán)限問題(npm?ERR!?The?operation?was?rejected?by?your?operating?system.errno?-4080)的解決過程,文中通過圖文介紹的非常詳細(xì),需要的朋友可以參考下
    2023-04-04

最新評論

荥经县| 晋城| 内黄县| 淅川县| 界首市| 东辽县| 桂阳县| 苍山县| 灵台县| 玛沁县| 辉县市| 象州县| 贵德县| 金门县| 会同县| 宾阳县| 靖远县| 黄山市| 四会市| 雷州市| 宿松县| 满洲里市| 社会| 南郑县| 水富县| 安阳市| 成安县| 大新县| 安远县| 吕梁市| 桐柏县| 抚顺县| 杭锦后旗| 马鞍山市| 苍溪县| 铜鼓县| 乌拉特后旗| 马关县| 鄂托克旗| 普宁市| 秦皇岛市|