所以我希望能够在使用群集模块创建的不同node.js
进程之间共享方法。
如果我运行下面的代码,我可以在子进程中共享方法server.handleRequest
,但是如果我在第二个文件中取消注释//server.test();
并尝试使用方法test
原始进程,节点崩溃。
"use strict";
var os = require('os');
var http = require('http');
var cluster = require('cluster');
function testMethod() {
console.log('Test');
}
function handleRequest(req, res) {
res.writeHead(200);
res.end("This answer comes from the process " + process.pid);
}
var createServer = function createServer(opts) {
var server = {};
server.test = testMethod;
server.handleRequest = handleRequest;
if (cluster.isMaster) {
var cpuCount = require('os').cpus().length;
for (var i = 0; i < cpuCount; i += 1) {
cluster.fork();
}
return server;
} else {
// Create HTTP server.
http.Server(function(req, res) {
server.handleRequest(req, res);
}).listen(8080);
}
}
module.exports = {
createServer: createServer,
};
包含上述文件的第二个文件。
"use strict";
var router = require('./test.js');
var server = router.createServer();
//server.test();
但是如果我不使用群集模块,我可以在工厂函数之外使用test
方法而不会崩溃。那么在使用集群模块时,如何在所有节点进程中共享在工厂函数中创建的方法?当只有原始流程调用test
?
server.test()
var http = require('http');
function testMethod() {
console.log('Test');
}
function handleRequest(req, res) {
res.writeHead(200);
res.end("This answer comes from the process " + process.pid);
}
var createServer = function createServer(opts) {
var server = {};
server.test = testMethod;
server.handleRequest = handleRequest;
http.Server(function(req, res) {
server.handleRequest(req, res);
}).listen(8080);
return server;
}
module.exports = {
createServer: createServer,
};