gpt4 book ai didi

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

转载 作者:行者123 更新时间:2023-11-29 00:03:50 26 4
gpt4 key购买 nike

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

服务器.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 成为真正的“应用程序”,而 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');
}

为了奖励积分,您可以使用诸如 Node 池之类的东西来创建连接池,然后让 db 模块从池中返回一个连接。

关于mysql - NodeJS - 如何将 mysql 连接从主进程传递到子进程?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/28433273/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com