3

我正在使用节点cluster模块,每个工作人员都加载一个数据库连接。

index.js

const cluster = require('cluster');
const database = require('./db.js');
if (cluster.isMaster) {
   cluster.fork();
   cluster.fork();
} else {...}

数据库.js

const mysql = require('mysql');
const pool = new mysql.pool(config);
module.exports = function(query){
    return pool.query(query);
}

我的理解是,每次产生一个工人时,它都会初始化db.js,这将创建一个新的池/连接到 mysql。

有没有另一种方法来构造它,以便所有工作人员共享同一个 mysql 池?

4

1 回答 1

3

Node.js worker 和 master 之间不能共享资源。其中每一个都是一个新过程,您所能做的就是通过消息进行通信(此处的文档)。

基于 Node.js 文档:

工作进程是使用 child_process.fork() 方法生成的,因此它们可以通过 IPC 与父进程通信并来回传递服务器句柄。

对于每个child_process我们都有:

重要的是要记住,生成的 Node.js 子进程独立于父进程,但两者之间建立的 IPC 通信通道除外。每个进程都有自己的内存,有自己的 V8 实例。由于需要额外的资源分配,因此不建议生成大量子 Node.js 进程。

根据您的应用程序架构,您可能能够将要共享的资源移动到主服务器,并将工作分配给工作人员。

于 2018-03-28T02:28:49.013 回答