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 从池中建立连接。
我尝试了以下 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 从池中建立连接。