乐闻世界logo
搜索文章和话题

nodejs如何开启多进程,进程之间如何通讯?

浏览14
6月24日 16:43

在Node.js中,可以利用cluster模块开启多个进程,以此来充分地利用多核CPU的资源。cluster模块可以创建一组Node.js进程,它们共享同一个服务器端口。

以下是一个使用cluster模块的基本步骤:

  1. 导入cluster模块和其他必须的模块。
  2. 使用cluster.isMaster判断当前是否是主进程(Master)。
  3. 在主进程中,可以使用cluster.fork()来创建工作进程(Worker)。
  4. 在工作进程中,执行实际的应用代码,如HTTP服务器的监听等。
  5. 监听相应的事件来处理工作进程的启动、在线、退出等情况。

进程之间的通信可以通过以下方式:

  • 主进程通过worker.send()发送消息到工作进程。
  • 工作进程通过process.send()发送消息到主进程。
  • 监听message事件来接收消息。

下面是一个创建多个工作进程并实现主工作进程通信的简单示例:

javascript
const cluster = require('cluster'); const http = require('http'); const numCPUs = require('os').cpus().length; if (cluster.isMaster) { console.log(`主进程 ${process.pid} 正在运行`); // 衍生工作进程。 for (let i = 0; i < numCPUs; i++) { const worker = cluster.fork(); // 主进程接收工作进程发送的消息 worker.on('message', (msg) => { console.log(`主进程收到消息 '${msg}' 来自工作进程 ${worker.process.pid}`); }); } cluster.on('exit', (worker, code, signal) => { console.log(`工作进程 ${worker.process.pid} 已退出`); }); } else { // 工作进程可以共享任何TCP连接。 // 在本例中,它是一个 HTTP 服务器。 http.createServer((req, res) => { res.writeHead(200); res.end('你好世界\n'); // 工作进程向主进程发送消息 process.send(`工作进程 ${process.pid} 收到请求`); }).listen(8000); console.log(`工作进程 ${process.pid} 已启动`); }

在这个例子中,主进程创建了和CPU核心数量相同的工作进程,并设置了接受消息的监听器。每当工作进程接收到HTTP请求时,它就会向主进程发送一个消息。主进程监听到消息后,在控制台中输出相关信息。

这种模式让Node.js应用可以在多核CPU上以更高效的方式运行,而且主工作进程之间的消息传递机制让它们可以交换信息。

标签:JavaScriptNodeJS