事件:'message'
\Event: 'message'
新增于: v0.7.0
-
message<Object> -
handle<undefined> | <Object>
类似于 cluster 的 'message' 事件,但特定于此工作线程。
\Similar to the 'message' event of cluster, but specific to this worker.
在工作进程中,也可以使用 process.on('message')。
\Within a worker, process.on('message') may also be used.
\See process event: 'message'.
这是使用消息系统的示例。它在主进程中记录工作进程接收到的 HTTP 请求数:
\Here is an example using the message system. It keeps a count in the primary process of the number of HTTP requests received by the workers:
import cluster from 'node:cluster'; import http from 'node:http'; import { cpus } from 'node:os'; import process from 'node:process'; if (cluster.isPrimary) { // Keep track of http requests let numReqs = 0; setInterval(() => { console.log(`numReqs = ${numReqs}`); }, 1000); // Count requests function messageHandler(msg) { if (msg.cmd && msg.cmd === 'notifyRequest') { numReqs += 1; } } // Start workers and listen for messages containing notifyRequest const numCPUs = cpus().length; for (let i = 0; i < numCPUs; i++) { cluster.fork(); } for (const id in cluster.workers) { cluster.workers[id].on('message', messageHandler); } } else { // Worker processes have a http server. http.Server((req, res) => { res.writeHead(200); res.end('hello world\n'); // Notify primary about the request process.send({ cmd: 'notifyRequest' }); }).listen(8000); }const cluster = require('node:cluster'); const http = require('node:http'); const process = require('node:process'); if (cluster.isPrimary) { // Keep track of http requests let numReqs = 0; setInterval(() => { console.log(`numReqs = ${numReqs}`); }, 1000); // Count requests function messageHandler(msg) { if (msg.cmd && msg.cmd === 'notifyRequest') { numReqs += 1; } } // Start workers and listen for messages containing notifyRequest const numCPUs = require('node:os').cpus().length; for (let i = 0; i < numCPUs; i++) { cluster.fork(); } for (const id in cluster.workers) { cluster.workers[id].on('message', messageHandler); } } else { // Worker processes have a http server. http.Server((req, res) => { res.writeHead(200); res.end('hello world\n'); // Notify primary about the request process.send({ cmd: 'notifyRequest' }); }).listen(8000); }