NodeJS - 如何将 mysql 连接从主进程传递到子进程?

NodeJS - How to pass a mysql connection from main to child process?

我尝试了以下 server+worker 代码,但它根本不起作用。

server.js:

var net = require('net');
var mysql = require('mysql');
var cp = require('child_process');

var serverPort=20460;

var connection = mysql.createConnection({
    database : 'test',
    host     : 'localhost',
    user     : 'root',
    password : ''
});

var server = net.createServer(function (socket){
    socket.on('data',function(data){
        console.log("Server received: ",data);
        var child = cp.fork('./worker');
        child.send({'connection': connection});
    });
});

connection.connect(function(err, two){
    if (!err) {
        server.listen(serverPort);
    }
});

worker.js:

process.on('message', function(obj) {
    //Will add more code to it later...
    console.log("CHILD::Received: ",obj);
});

在子进程中出现以下错误' console.log():

JSON.stringify, avoid TypeError: Converting circular structure to JSON

有什么建议吗?

我的方法是让 worker.js 成为真正的 "app",而 server.js 只是设置集群。我没有测试过这个,但大致是这样的:

// worker.js    
var connection = require('./db');
var net = require('net');

var server = net.createServer(function (socket){
    socket.on('data',function(data){
        console.log("Server received: ",data);
        connection.connect();
        connection.query(/* your query here for inserting data */);
        connection.end();
    });
});

// db.js
var mysql = require('mysql');

var serverPort=20460;

var connection = mysql.createConnection({
    database : 'test',
    host     : 'localhost',
    user     : 'root',
    password : ''
});
module.exports = connection;

// server.js
var cluster = require('cluster');
var numCPUs = require('os').cpus().length;

if (cluster.isMaster) {
  // Fork workers.
  for (var i = 0; i < numCPUs; i++) {
    cluster.fork();
  }

  cluster.on('exit', function(worker, code, signal) {
    console.log('worker ' + worker.process.pid + ' died');
  });
} else {
  require('./worker');
}

为了加分,您可以使用节点池之类的东西来创建连接池,然后让数据库模块 return 从池中建立连接。