事件:'message'


\Event: 'message'

新增于: v0.7.0

类似于 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.

参见 process 事件:'message'

\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 { availableParallelism } 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 = availableParallelism();
 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 numCPUs = require('node:os').availableParallelism();
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
 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);
}

AltStyle によって変換されたページ (->オリジナル) /