node --- [node接口阅读]cluster的使用
生活随笔
收集整理的這篇文章主要介紹了
node --- [node接口阅读]cluster的使用
小編覺得挺不錯(cuò)的,現(xiàn)在分享給大家,幫大家做個(gè)參考.
目標(biāo)
- 在主進(jìn)程中完成以下事情:
- 在各個(gè)CPU的進(jìn)程中完成以下事情
前置知識(shí)
- process.pid
在主進(jìn)程cluster.isMaster中, process.id是主進(jìn)程的id
在工作進(jìn)程(子進(jìn)程)cluster.isWorker中,process.id是工作進(jìn)程(子進(jìn)程)的id
- 獲取cpu的數(shù)量
- 判斷一個(gè)進(jìn)程是否為主進(jìn)程
- 創(chuàng)建一個(gè)新進(jìn)程
實(shí)現(xiàn)
const cluster= require('cluster'); const http = require('http');if(cluster.isMaster) {// 主進(jìn)程let count = 0;// 每隔1秒鐘,就輸出當(dāng)前的訪問次數(shù)setInterval(()=>{console.log(`訪問次數(shù)為: ${count}`)}, 1000);let numCPUs = require('os').cpus().length;for(let i =0 ; i < numCPUs ; i++) {cluster.fork(); // 創(chuàng)建等同于cpu核數(shù)的進(jìn)程}for(let id in cluster.workers){cluster.workers[id].on('message', (msg) =>{if(msg.cmd && msg.cmd === 'notifyRequest') {count++;}})} } else {// 子進(jìn)程http.Server((req, res) => {if(req.url !== '/favicon.ico') {res.writeHead(200);res.end('Hi Marron');// 通知執(zhí)行 cmd.notifyRequest 事件process.send({cmd: 'notifyRequest'});}}).listen(8000) }擴(kuò)展
- 由于node.js是單線程.很容易卡死而導(dǎo)致崩潰.如下
- 說明會(huì)直接報(bào)錯(cuò)ReferenceError: aaa is not defined,會(huì)直接退出當(dāng)前進(jìn)程.
- 思路: 可以在主進(jìn)程中監(jiān)聽,一旦發(fā)現(xiàn)有進(jìn)程死亡,就開啟新的進(jìn)程.
綜上所述,明確在主進(jìn)程中的目標(biāo):
子進(jìn)程:
當(dāng)掛的時(shí)候,自動(dòng)重新啟動(dòng)當(dāng)前服務(wù)
總結(jié)
以上是生活随笔為你收集整理的node --- [node接口阅读]cluster的使用的全部內(nèi)容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: javascript --- Obje
- 下一篇: PC微信小程序突然Charles抓不到包