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

Node.js進程管理之進程集群詳解

 更新時間:2022年07月06日 14:14:44   作者:社會主義接班人  
這篇文章介紹了Node.js進程管理之進程集群,文中通過示例代碼介紹的非常詳細。對大家的學習或工作具有一定的參考借鑒價值,需要的朋友可以參考下

一、cluster模塊

Node.js是單線程處理,對于高并發(fā)的請求怎么樣能增加吞吐量呢?為了提高服務器的利用率,能不能多核的來處理呢?于是就有了cluster模塊。

cluster模塊可以輕松實現(xiàn)運行在同一機器不同進程上的TCP或HTTP服務器集群。它們?nèi)允褂孟嗤牡讓犹捉幼?,從而在相同的IP地址和端口組合上處理請求。

下面是它的一些事件屬性和方法。

事件:

fork:當新的工作進程已經(jīng)被派生時發(fā)出。callback函數(shù)接收worker對象作為唯一的參數(shù)。function(Worker)

online:當新的進程發(fā)回一消息,表明它已經(jīng)啟動時發(fā)出。callback同上。

listening:當工作進程調(diào)用listen()開始監(jiān)聽端口時發(fā)出。callback:fucntion(Worker,address)

disconnect:當IPC通道被切斷時發(fā)出。如服務器調(diào)用worker.disconnect()的時候。callback:function(Worker)

exit:在Worker對象已斷開時發(fā)出。callback:function(Worker,code,signal)

setup:在setupMaster()被首次調(diào)用時發(fā)出。

屬性和方法:

settings:包含exec(工作進程的javascript文件)、args(傳遞的參數(shù)數(shù)組)、silent(斷開工作進程的IPC機制)屬性值,用于建立集群

isMaster:判斷當前進程是否是主進程

isWorker:判斷當前進程是否是工作進程

setupMaster([settings]):啟動主進程

disconnect([callback]):斷開工作進程的IPC機制,并關(guān)閉句柄,當斷開連接完成時回調(diào)

worker:引用在工作進程的當前Worker對象

workers:包含Worker對象,可以通過標識從主進程引用它們。cluster.workers[workerId]

二、Worker對象

當一個工作進程被派時,一個新的Worker對象同時在主進程和工作進程中創(chuàng)建。在工作進程中Worker對象用來表示當前的工作進程,并與正在發(fā)生的集群事件進行交互。在主進程中,Worker對象代表子工作進程,是主應用程序向他們發(fā)送信息,接收它們的狀態(tài)變化的事件甚至殺掉他們。

它也是有一些事件屬性方法。

事件:

message:在工作進程收到一個新信息時發(fā)出,回調(diào)函數(shù)把message作為唯一的參數(shù)值

disconnect:在IPC通道已對這個工作進程斷開后發(fā)出

exit:Worker對象已經(jīng)斷開時發(fā)出

error:工作進程發(fā)生錯誤時發(fā)出

屬性方法:

id:工作進程標識

Process:工作進程運行的ChildProcess對象

suicide:對這個工作進程調(diào)用kill()或disconnect()時被設置為true。可以使用此標志來確定是否要跳出嘗試的循環(huán),并退出

send(message,[sendHandle]):將消息發(fā)送到主進程

kill([signal]):通過斷開IPC通道殺掉當前工作進程,然后退出,將suicide設置為true。

disconnect():工作進程調(diào)它時,關(guān)閉所有服務器,等待關(guān)閉事件,并斷開IPC通道。當從主節(jié)點調(diào)時,發(fā)送一個內(nèi)部消息給工作進程,使其斷開本身,設置suicide為true。

三、實踐

上面的也都是理論,下面通過實現(xiàn)一個HTTP集群來實踐一下。

1.主進程

var cluster = require('cluster');
var http = require('http');
if (cluster.isMaster) {
  cluster.on('fork', function(worker) {
    console.log("Worker " + worker.id + " created");
  });
  cluster.on('listening', function(worker, address) {
    console.log("Worker " + worker.id +" is listening on " + 
                address.address + ":" + address.port);
  });
  cluster.on('exit', function(worker, code, signal) {
    console.log("Worker " + worker.id +" Exited");    
  });
  cluster.setupMaster({exec:'cluster_worker.js'});
  var numCPUs = require('os').cpus().length;
  for (var i = 0; i < numCPUs; i++) {
    if (i>=4) break;
    cluster.fork();
  }
  Object.keys(cluster.workers).forEach(function(id) {
    cluster.workers[id].on('message', function(message){
      console.log(message);
    });
  });
}

2.工作進程

var cluster = require('cluster');
var http = require('http');
if (cluster.isWorker) {
  http.Server(function(req, res) {
    res.writeHead(200);
    res.end("Process " + process.pid + " says hello");
    process.send("Process " + process.pid + " handled request");
  }).listen(8080, function(){
    console.log("Child Server Running on Process: " + process.pid);    
  });
}

3.HTTP客戶端測試

var http = require('http');
var options = { port: '8080'};
function sendRequest(){
  http.request(options, function(response){
    var serverData = '';
    response.on('data', function (chunk) {
      serverData += chunk;
    });
    response.on('end', function () {
      console.log(serverData);
    });
  }).end();
}
for (var i=0; i<5; i++){
  console.log("Sending Request");
  sendRequest();
}

首先是啟動主進程,創(chuàng)建工作進程開始監(jiān)聽

"C:\Program Files (x86)\JetBrains\WebStorm 11.0.3\bin\runnerw.exe" F:\nodejs\node.exe cluster_server.js
Worker 1 created
Worker 2 created
Worker 3 created
Worker 4 created
Child Server Running on Process: 6152
Worker 1 is listening on null:8080
Child Server Running on Process: 10340
Worker 2 is listening on null:8080
Child Server Running on Process: 11412
Worker 3 is listening on null:8080
Child Server Running on Process: 12120
Worker 4 is listening on null:8080

其次啟動HTTP客戶端測試

"C:\Program Files (x86)\JetBrains\WebStorm 11.0.3\bin\runnerw.exe" F:\nodejs\node.exe cluster_client.js
Sending Request
Sending Request
Sending Request
Sending Request
Sending Request
Process 12120 says hello
Process 11412 says hello
Process 12120 says hello
Process 10340 says hello
Process 6152 says hello

Process finished with exit code 0

到此這篇關(guān)于Node.js進程管理之進程集群的文章就介紹到這了。希望對大家的學習有所幫助,也希望大家多多支持腳本之家。

相關(guān)文章

  • node.js中的events.emitter.listeners方法使用說明

    node.js中的events.emitter.listeners方法使用說明

    這篇文章主要介紹了node.js中的events.emitter.listeners方法使用說明,本文介紹了events.emitter.listeners 的方法說明、語法、接收參數(shù)、使用實例和實現(xiàn)源碼,需要的朋友可以參考下
    2014-12-12
  • Node.js 獲取微信JS-SDK CONFIG的方法示例

    Node.js 獲取微信JS-SDK CONFIG的方法示例

    這篇文章主要介紹了Node.js 獲取微信JS-SDK CONFIG的方法示例,文中通過示例代碼介紹的非常詳細,對大家的學習或者工作具有一定的參考學習價值,需要的朋友們下面隨著小編來一起學習學習吧
    2019-05-05
  • 在nodeJs中如何修改json文件中的數(shù)據(jù)

    在nodeJs中如何修改json文件中的數(shù)據(jù)

    這篇文章主要介紹了在nodeJs中如何修改json文件中的數(shù)據(jù),具有很好的參考價值,希望對大家有所幫助。如有錯誤或未考慮完全的地方,望不吝賜教
    2022-10-10
  • 使用pkg打包nodejs項目并解決本地文件讀取的問題

    使用pkg打包nodejs項目并解決本地文件讀取的問題

    這篇文章主要介紹了使用pkg打包nodejs項目并解決本地文件讀取的問題,具有很好的參考價值,希望對大家有所幫助,如有錯誤或未考慮完全的地方,望不吝賜教
    2023-10-10
  • package.json各個屬性說明詳解

    package.json各個屬性說明詳解

    這篇文章主要介紹了package.json各個屬性說明詳解,文中通過示例代碼介紹的非常詳細,對大家的學習或者工作具有一定的參考學習價值,需要的朋友們下面隨著小編來一起學習學習吧
    2020-03-03
  • npm dose not support Node.js v10.15.3的解決方法

    npm dose not support Node.js v10.15

    這篇文章主要給大家介紹了關(guān)npm dose not support Node.js v10.15.3的解決方法,文中通過圖文介紹的非常詳細,對大家的學習或者工作具有一定的參考借鑒價值,需要的朋友可以參考下
    2023-11-11
  • Nodejs中調(diào)用系統(tǒng)命令、Shell腳本和Python腳本的方法和實例

    Nodejs中調(diào)用系統(tǒng)命令、Shell腳本和Python腳本的方法和實例

    這篇文章主要介紹了Nodejs中調(diào)用系統(tǒng)命令、Shell腳本和Python腳本的方法和實例,本文給出了利用子進程調(diào)用系統(tǒng)命令、執(zhí)行系統(tǒng)命令、調(diào)用傳參數(shù)的shell腳本、調(diào)用python腳本的例子,需要的朋友可以參考下
    2015-01-01
  • 使用node.js 制作網(wǎng)站前臺后臺

    使用node.js 制作網(wǎng)站前臺后臺

    本文給大家介紹實用node.js 制作網(wǎng)站前臺和后臺,非常的詳盡,有需要的朋友可以參考下
    2014-11-11
  • NodeJs+MySQL實現(xiàn)注冊登錄功能

    NodeJs+MySQL實現(xiàn)注冊登錄功能

    這篇文章主要為大家詳細介紹了NodeJs+MySQL實現(xiàn)注冊登錄功能,文中示例代碼介紹的非常詳細,具有一定的參考價值,感興趣的小伙伴們可以參考一下
    2022-04-04
  • PHP和NodeJs開發(fā)的應用如何共用Session

    PHP和NodeJs開發(fā)的應用如何共用Session

    這篇文章主要介紹了PHP和NodeJs開發(fā)的應用如何共用Session的相關(guān)資料及思路,需要的朋友可以參考下
    2015-04-04

最新評論

竹北市| 五家渠市| 中牟县| 白水县| 灵台县| 那曲县| 阆中市| 平顶山市| 贵溪市| 乌兰察布市| 交城县| 玉树县| 家居| 墨竹工卡县| 汉阴县| 娱乐| 和田市| 荆州市| 扎鲁特旗| 登封市| 横山县| 井冈山市| 繁昌县| 秭归县| 鄂州市| 临清市| 龙口市| 麻江县| 洛南县| 和龙市| 文昌市| 宁海县| 临沧市| 唐山市| 晋江市| 汽车| 老河口市| 祁阳县| 肥城市| 清苑县| 门源|