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