Skip to content

fork-nodejs-learning-guide

cluster 是一个用于创建集群的模块,它允许一个程序创建多个进程,并让这些进程共享服务器端口。

js
const cluster = require('node:cluster')
console.log(cluster)

// EventEmitter {
//   _events: [Object: null prototype] {},
//   _eventsCount: 0,
//   _maxListeners: undefined,
//   isWorker: false,
//   isMaster: true,
//   isPrimary: true,
//   Worker: [Function: Worker],
//   workers: {},
//   settings: {},
//   SCHED_NONE: 1,
//   SCHED_RR: 2,
//   schedulingPolicy: 2,
//   setupPrimary: [Function (anonymous)],
//   setupMaster: [Function (anonymous)],
//   fork: [Function (anonymous)],
//   disconnect: [Function (anonymous)],
//   [Symbol(kCapture)]: false
// }
js
const cluster = require('cluster')
const os = require('os')
const http = require('node:http')

if (cluster.isMaster){
  let worker
  for (let i = 0, n = os.cpus().length; i < n; i += 1){
    worker = cluster.fork()
  }
  worker.send('hi there')
  // console.log(worker)
  console.log('os cpus', os.cpus().length)
  cluster.on('online', function(worker) {
    console.log('Worker ' + worker.process.pid + ' is online')
  })
  cluster.on('exit', function(worker, code, signal) {
    console.log('Worker ' + worker.process.pid + ' died with code: ' + code + ', and signal: ' + signal)
    // console.log('Starting a new worker')
    // cluster.fork()
  })
  worker.process.on('message', (msg) => {
    console.log('worker message', msg)
  })
} else {
  http.createServer(function(req, res) {
    res.writeHead(200)
    res.end(`response from worker ${process.pid}`)
  }).listen(8000)
  process.on('message', function(msg) {
    // process.send('process message', msg)
    process.send('process message')
  })
}
sh
#!/bin/bash

# req.sh
for((i=1;i<=4;i++)); do   
  curl http://127.0.0.1:8000
  echo ""
done