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