我正在使用节点cluster
模块,每个工作人员都加载数据库连接。
index.js
const cluster = require('cluster');
const database = require('./db.js');
if (cluster.isMaster) {
cluster.fork();
cluster.fork();
} else {...}
db.js
const mysql = require('mysql');
const pool = new mysql.pool(config);
module.exports = function(query){
return pool.query(query);
}
我的理解是,每次生成一个worker时,它都会初始化db.js
,这将创建一个新的mysql池/连接。
是否有另一种方法来构建它,以便所有工作者共享相同的mysql池?
答案 0 :(得分:2)
无法在Node.js worker和master之间共享资源。其中每个都是一个新流程,您所能做的就是通过消息进行沟通(文档here)。
基于Node.js文档:
使用child_process.fork()方法生成工作进程,以便它们可以通过IPC与父进行通信并来回传递服务器句柄。
对于每个child_process
我们都有:
重要的是要记住,衍生的Node.js子进程独立于父进程,但两者之间建立的IPC通信通道除外。每个进程都有自己的内存,带有自己的V8实例。由于需要额外的资源分配,因此不建议生成大量子Node.js进程。
根据您的应用程序体系结构,您可以将资源移动到主服务器,并将工作分发给员工。