欧美一级特黄大片做受成人-亚洲成人一区二区电影-激情熟女一区二区三区-日韩专区欧美专区国产专区

怎么提升nodejs的穩(wěn)定性

這篇文章主要介紹怎么提升nodejs的穩(wěn)定性,文中介紹的非常詳細(xì),具有一定的參考價(jià)值,感興趣的小伙伴們一定要看完!

創(chuàng)新互聯(lián)建站主營(yíng)蓬萊網(wǎng)站建設(shè)的網(wǎng)絡(luò)公司,主營(yíng)網(wǎng)站建設(shè)方案,app開(kāi)發(fā)定制,蓬萊h5重慶小程序開(kāi)發(fā)公司搭建,蓬萊網(wǎng)站營(yíng)銷推廣歡迎蓬萊等地區(qū)企業(yè)咨詢

提升nodejs穩(wěn)定性的方法:1、保持良好的代碼結(jié)構(gòu);2、使用“try~catch”來(lái)捕獲異常;3、使用domain模塊來(lái)處理程序的異常;4、使用log4js模塊記錄日志;5、使用forever模塊管理nodejs。

本教程操作環(huán)境:windows7系統(tǒng)、nodejs 12.19.0版,DELL G3電腦。

提高nodejs程序的穩(wěn)定性,健壯性

在網(wǎng)上看到一些帖子,吐糟,質(zhì)疑nodejs 程序的穩(wěn)定性,為什么呢?其一,可能這個(gè)和javascript有關(guān)吧,node是拿javascript去實(shí)現(xiàn)的,而javascript又被稱為是“世界上誤解最深的語(yǔ)言”,我們可以去看看nodejs 創(chuàng)始人的說(shuō)法,可以去看看知乎的這篇文章,為什么node 用javascript去實(shí)現(xiàn),其二,nodejs 畢竟還年輕,而且官網(wǎng)在部分模塊也標(biāo)注了此模塊的目前的狀態(tài)。

這2天我抽了點(diǎn)時(shí)間思考了下這個(gè)問(wèn)題,我覺(jué)得我們程序首先功能應(yīng)該是獨(dú)立的,就是一個(gè)功能出異常了,不應(yīng)該去影響另外一個(gè)正常的功能,不應(yīng)該將整個(gè)程序都崩潰掉,其次,即使是程序崩潰了,我們也應(yīng)該有一個(gè)讓程序自動(dòng)啟動(dòng),另外,應(yīng)該去記錄日志,方便我們跟蹤問(wèn)題。我覺(jué)得主要可以從以下方面提高nodejs 穩(wěn)定性:

1)保持良好的代碼結(jié)構(gòu):

我們知道node是單線程,非阻塞io,默認(rèn)就是異步,通過(guò)回調(diào)的方式處理后面的流程,如果嵌套的層次太多了,勢(shì)必會(huì)引起代碼邏輯結(jié)構(gòu)的混亂,也不利于維護(hù)和升級(jí),可以采用async這個(gè)異步流程控制模塊,來(lái)理清我們的代碼邏輯。

2)使用 process.on('uncaughtException', function(err){...}); 來(lái)處理未被捕捉的錯(cuò)誤。

3)使用try~catch 來(lái)捕獲異常:

這個(gè)只能解決一部分問(wèn)題,不是萬(wàn)能的,在上面說(shuō)到因?yàn)閚ode是單線程,非阻塞io,默認(rèn)就是異步,通過(guò)回調(diào)的方式處理后面的流程,try~catch 是不能捕獲的callback 里面的error的錯(cuò)誤的,怎么捕獲到callback里面的錯(cuò)誤呢 ? 可以采用domain模塊

4)使用domain模塊來(lái)處理程序的異常

先看看對(duì)domain的解釋:domain是 EventEmitter類的一個(gè)子類。監(jiān)聽(tīng)它的error事件來(lái)處理它捕捉到的錯(cuò)誤。 它提供了一種方式,即以一個(gè)單一的組的形式來(lái)處理多個(gè)不同的IO操作。如果任何一個(gè)注冊(cè)到domain的事件觸發(fā)器或回調(diào)觸發(fā)了一個(gè)‘error’事件,或者拋出一個(gè)錯(cuò)誤,那么domain對(duì)象將會(huì)被通知到。而不是直接讓這個(gè)錯(cuò)誤的上下文從`process.on('uncaughtException')'處理程序中丟失掉,也不會(huì)致使程序因?yàn)檫@個(gè)錯(cuò)誤伴隨著錯(cuò)誤碼立即退出。

如何使用domain 模塊呢?看一個(gè)例子:

serverDomain.run(function() {
  // 服務(wù)器在serverDomain的作用域內(nèi)被創(chuàng)建
  http.createServer(function(req, res) {
    // req和res同樣在serverDomain的作用域內(nèi)被創(chuàng)建
    // 但是,我們想對(duì)于每一個(gè)請(qǐng)求使用一個(gè)不一樣的域。
    // 所以我們首先創(chuàng)建一個(gè)域,然后將req和res添加到這個(gè)域上。
    var reqd = domain.create();
    reqd.add(req);
    reqd.add(res);
    reqd.on('error', function(er) {
      console.error('Error', er, req.url);
      try {
        res.writeHead(500);
        res.end('Error occurred, sorry.');
      } catch (er) {
        console.error('Error sending 500', er, req.url);
      }
    });
  }).listen(1337);    
});
```

說(shuō)明:首先創(chuàng)建一個(gè)域(domain.create()),然后將需要監(jiān)控的分發(fā)器添加到該域上,最后給域綁定一個(gè)錯(cuò)誤事件,這樣就可以監(jiān)控了。

再看一個(gè)例子:

var d = domain.create();
d.on('error', function(er) {
  console.error('Caught error!', er);
});
d.run(function() {
  process.nextTick(function() {
    setTimeout(function() { // 模擬幾個(gè)不同的異步的東西
      fs.open('non-existent file', 'r', function(er, fd) {
        if (er) throw er;
        // 繼續(xù)。。。
      });
    }, 100);
  });
});

說(shuō)明:首先創(chuàng)建一個(gè)域,給域綁定一個(gè)錯(cuò)誤事件,然后在域的上下文提供可以運(yùn)行的函數(shù)

如果對(duì)于回調(diào)呢?可以這么使用

var d = domain.create();

function readSomeFile(filename, cb) {
  fs.readFile(filename, 'utf8', d.bind(function(er, data) {
    // if this throws, it will also be passed to the domain
    return cb(er, data ? JSON.parse(data) : null);
  }));
}

d.on('error', function(er) {
  // an error occurred somewhere.
  // if we throw it now, it will crash the program
  // with the normal line number and stack message.
});

當(dāng)然也可以這么使用

var d = domain.create();

function readSomeFile(filename, cb) {
  fs.readFile(filename, 'utf8', d.bind(function(er, data) {
    // if this throws, it will also be passed to the domain
    return cb(er, data ? JSON.parse(data) : null);
  }));
}

d.on('error', function(er) {
  // an error occurred somewhere.
  // if we throw it now, it will crash the program
  // with the normal line number and stack message.
});

這個(gè)函數(shù)與domain.bind(callback)幾乎一模一樣。但是,除了捕捉被拋出的錯(cuò)誤外,它還會(huì)攔截作為第一參數(shù)被傳遞到這個(gè)函數(shù)的Error對(duì)象。

5)使用log4js 模塊記錄日志

log4js 是一個(gè)非常強(qiáng)大的日志管理工具,在可以看看github這個(gè)項(xiàng)目: https://github.com/nomiddlename/log4js-node

6)使用forever 模塊來(lái)管理nodejs

forever 是服務(wù)端管理nodejs 的一個(gè)模塊,一個(gè)命令行工具,能夠啟動(dòng),停止app 應(yīng)用。forever完全是基于命令行操作,在forever進(jìn)程管理之下,創(chuàng)建node的子進(jìn)程,通過(guò)monitor監(jiān)控node子進(jìn)程的運(yùn)行情況,一旦文件更新,或者進(jìn)程掛掉,forever會(huì)自動(dòng)重啟node服務(wù)器,確保應(yīng)用正常運(yùn)行。非常的好用.

可以關(guān)注下這個(gè)項(xiàng)目:https://github.com/nodejitsu/forever

但是forever 也不是萬(wàn)能的,也由下面這些問(wèn)題:

  • 有限的監(jiān)控和日志功能

  • 進(jìn)程管理配置的支持差

  • 不支持集群

  • 代碼庫(kù)老化(意味著在升級(jí)node.js時(shí)頻繁的失敗)

以上是“怎么提升nodejs的穩(wěn)定性”這篇文章的所有內(nèi)容,感謝各位的閱讀!希望分享的內(nèi)容對(duì)大家有幫助,更多相關(guān)知識(shí),歡迎關(guān)注創(chuàng)新互聯(lián)行業(yè)資訊頻道!

文章名稱:怎么提升nodejs的穩(wěn)定性
文章起源:http://aaarwkj.com/article36/gihgpg.html

成都網(wǎng)站建設(shè)公司_創(chuàng)新互聯(lián),為您提供網(wǎng)站設(shè)計(jì)公司、外貿(mào)建站、動(dòng)態(tài)網(wǎng)站、虛擬主機(jī)標(biāo)簽優(yōu)化、微信小程序

廣告

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

成都app開(kāi)發(fā)公司
欧美熟妇精品一级视频| 日本免费的高清一区二区| 激情五月天色婷婷久久| 日本欧美亚洲一区二区三区| 亚洲一区二区三区 日韩精品| 亚洲一二三区精品与老人| 人妻在线中文字幕一区| 亚洲一区免费在线视频| 亚洲av区一区二区三| 日韩成人在线视频中文字幕| 尤物视频官网在线观看| 欧美日韩亚洲精品亚洲欧洲| 精品人妻一区三区蜜桃| 婷婷色综合一区二区三区| 欧美一区二区国产精品日韩| 国产精品国产亚洲精品看不| 国产高清不卡一二三区| 午夜激情视频福利在线观看| 久章草在线免费视频播放| 日韩免费黄色av网站| 亚洲大尺码在线视频香蕉| 在线激情av中文字幕| 国产在线一区二区三区观看| 成人在线午夜你懂的视频| 欧美伊人色综合久久天天| 新人妻一区二区在线视频| 日韩精品一区二区三区电影在线播放| 国产一级二级三级黄色| 国产精品一区二区污网站| 亚洲精品偷拍在线观看| 免费高清日本一区二区三区视频 | 中文字幕四虎在线观看| 日本人妻在线一区二区三区| 岛国毛片在线免费播放| 欧美一区二区男人天堂| 综合激情网激情五月天| 中文字幕伦理一区二区| 欧美日韩另类国产综合| 精品国产三级a在线观看网站| 我的极品小姨在线观看| 中文精品字幕人妻熟女小妇|