库events的简单使用cluster的简单使用

 

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++) {
    var worker = cluster.fork();
    addListener(worker);
  }
  cluster.on('setup', function(settings) { //配置完成后
    console.log('[master]  setup: settings: ' + JSON.stringify(settings));
  });
  cluster.on('fork', function(worker) {//fork完成后
    console.log('[master]  fork: worker' + worker.id + ',pid:' + worker.process.pid);
  });
  cluster.on('online', function(worker) {//worker运行后
    console.log('[master]  online: worker' + worker.id + ',pid:' + worker.process.pid);
  });
  cluster.on('listening', function(worker, address) {//worker进入监听状态
     console.log('[master]  listening: worker' + worker.id + ',pid:' + worker.process.pid + ', Address:' + address.address + ":" + address.port);
  });
  cluster.on('disconnect', function(worker) {//worker断开
    console.log('[master]  disconnect: worker' + worker.id + ',pid:' + worker.process.pid);
  });

  cluster.on('exit', function(worker, code, signal) {//worker退出
    console.log('[master] exit: worker' + worker.id + ',pid:' + worker.process.pid + ', code:' + code + ', signal:'+signal);
    var worker = cluster.fork();  //重新启动一个worker
    addListener(worker);
  });

} else {
  // Workers can share any TCP connection
  // In this case its a HTTP server
  console.log('[worker] ' + "start worker ..." + cluster.worker.id);
  http.createServer(function(req, res) {
    res.writeHead(200);
    console.log('worker'+cluster.worker.id);
    res.end('worker'+cluster.worker.id+',PID:'+process.pid);
  }).listen(8000);
  process.send('hi master, I am worker' + cluster.worker.id + '.');//向master发送消息
  process.on('message', function(msg) { //监听master发过来的消息
      console.log('[worker]  message: got message from master [' + msg +']');
  });
}

function addListener(worker){
    // worker.on('online', function() {
    //   console.log('[worker]  online: worker' + worker.id + ',pid:' + worker.process.pid);
    // });
    // worker.on('listening', function(address) {
    //   console.log('[worker]  listening: worker' + worker.id + ',pid:' + worker.process.pid + ', Address:' + address.address + ":" + address.port);
    // });
    worker.on('message', function(msg) {// 监听worker发过来的消息
      console.log('[master]  message: got message from worker [' + msg +']');
      worker.send('hello, worker'+worker.id);//向worker发送消息
    });
    // worker.on('disconnect', function() {
    //   console.log('[worker]  disconnect: worker' + worker.id + ',pid:' + worker.process.pid);
    // });
    // worker.on('exit', function(code, signal) {
    //   console.log('[worker] exit: worker' + worker.id + ',pid:' + worker.process.pid + ', code:' + code + ', signal:'+signal);
    // });
}

 

 

引用http://www.infoq.com/cn/articles/nodejs-cluster-round-robin-load-balancing的解释

写道
Windows上的注意事项

MS Windows是默认使用老办法的唯一平台。为了达到性能最优,Node.js在Windows上使用了IOCP。尽管这在大多数情况下都不错,但这样将HANDLE对象(连接)发送给其它进程代价十分高昂。 尽管有可能在libuv中解决这个问题,但我们还不清楚是否真的有必要这么做:Windows的端口几乎不会受到负载均衡问题的影响,而Linux和Solaris的端口确实会受影响。

 

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值