2014-04-01 32 views
0

节点集群提供了一种便捷的方式来分叉子进程以平衡服务器负载,这符合大多数操作系统中传统fork()系统调用的原理。在官方集群文档页面中,示例代码演示了主服务器与其工作服务器的不同之处,因为所有代码都驻留在同一个文件中,所以非常好。但在现实生活中的项目,我发现不够详细的文档,供用户在不同情况下都适用的模块,例如,什么是使用节点集群模块最习惯的方式?

  • 什么是“服务器”,在server.listen()是什么意思?只是一个HTTP服务器?
  • 开发人员应该如何将部分感兴趣的代码作为子进程分叉,这些子进程将与其他代码在同一进程中运行? (更糟糕的是,子进程可能在工作进程和主进程之间共享状态依赖关系?)
  • 工作进程如何与任意数据通信?
  • 将子进程中运行的代码与主进程分开的最佳方式是什么,还是真的有必要?

任何意见,将不胜感激。谢谢。

回答

0

Node.js Cluster API docs提供了很好的例子。

简短的回答是Server.listen()是一个节点http服务器。群集模块使用child_process.fork()方法,然后通过IPC保持工作人员同步。

从文档这个例子中,请注意主从来不打电话server.listen()

var cluster = require('cluster'); 
var http = require('http'); 
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 { 
    // Workers can share any TCP connection 
    // In this case its a HTTP server 
    http.createServer(function(req, res) { 
    res.writeHead(200); 
    res.end("hello world\n"); 
    }).listen(8000); 
} 
+0

究竟是什么让我感到困惑的是,这个可爱的一段代码没有工作在Windows上。节点文档说Windows不支持IPC上的命名管道。那么,我怎么可能在Windows机器上使用集群模块呢? – elliottye

相关问题