- 1、原创力文档(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。。
- 2、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载。
- 3、如文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“版权申诉”(推荐),也可以打举报电话:400-050-0827(电话支持时间:9:00-18:30)。
查看更多
文档首页
英文版文档
本作品采用知识共享署名-非商业性使用 3.0 未本地化版本许可协议进行许可。
Node.js v4.2.4 手册 文档
索引?|?在单一页面中浏览?|?JSON格式
目录
集群
它是如何工作的
cluster.schedulingPolicy
cluster.settings
集群的主进程(判断当前进程是否是主进程)
当前进程是否是从主进程的fork出来的
事件: fork
事件: online
事件: listening
事件: disconnect
事件: exit
事件: setup
cluster.setupMaster([settings])
cluster.fork([env])
cluster.disconnect([callback])
cluster.worker
cluster.workers
类: Worker
worker.id
cess
worker.suicide
worker.send(message, [sendHandle])
worker.kill([signal=SIGTERM])
worker.disconnect()
事件: message
事件: online
事件: listening
事件: disconnect
事件: exit
集群#
稳定度: 1 - 实验性
单个 Node 实例运行在单个线程中。要发挥多核系统的能力,用户有时候需要启动一个 Node 进程集群来处理负载。
集群模块允许你方便地创建一个共享服务器端口的进程网络。
cluster.on(exit, function(worker, code, signal) {
console.log(worker + cess.pid + died);});
if (cluster.isMaster) {
cluster.fork();
cluster.fork();
console.log(master pid: + process.pid);} 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);
console.log(child pid: + process.pid);}
现在,运行 node 将会在所有工作进程间共享 8000 端口:
% NODE_DEBUG=cluster node server.js23521,Master Worker 23524 online23521,Master Worker 23526 online23521,Master Worker 23523 online23521,Master Worker 23528 online
这是一个近期推出的功能,在未来版本中可能会有所改变。请尝试并提供反馈。
还要注意的是,在 Windows 中尚不能在工作进程中建立一个被命名的管道服务器。
它是如何工作的#
工作进程是通过使用?child_process.fork?方法派生的,因此它们可以通过 IPC(进程间通讯)与父进程通讯并互相传递服务器句柄。
集群模块支持两种分配传入连接的方式。
第一种(同时也是除 Windows 外所有平台的缺省方式)为循环式:主进程监听一个端口,接受新连接,并以轮流的方式分配给工作进程,并以一些内建机制来避免单个工作进程的超载。
第二种方式是,主进程建立监听嵌套字,并将它发送给感兴趣的工作进程,由工作进程直接接受传入连接。
第二种方式理论上有最好的性能。然而在实践中,由于操作系统的调度变幻莫测,分配往往十分不平衡。负载曾被观测到超过 70% 的连接结束于总共八个进程中的两个。
因为?server.listen()?将大部分工作交给了主进程,所以一个普通的node.js进程和一个集群工作进程会在三种情况下有所区别:
server.listen({fd: 7})?由于消息被传递到主进程,父进程中的文件描述符 7 会被监听,并且句柄会被传递给工作进程,而不是监听工作进程中文件描述符 7 所引用的东西。
server.listen(handle)?明确地监听一个句柄会使得工作进程使用所给句柄,而不是与主进程通讯。如果工作进程已经拥有了该句柄,则假定您知道您在做什么。
server.listen(0)?通常,这会让服务器监听一个随机端口。然而,在集群中,各个工作进程每次listen(0)?
文档评论(0)