在node.js中跨进程共享方法

时间:2015-07-08 19:15:32

标签: javascript node.js

所以我希望能够在使用群集模块创建的不同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,

};

0 个答案:

没有答案