`
weiqingfei
  • 浏览: 318254 次
  • 性别: Icon_minigender_1
  • 来自: 黑洞
社区版块
存档分类
最新评论

库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的端口确实会受影响。

 

分享到:
评论

相关推荐

    Python库 | pusher-1.2.1-py2-none-any.whl

    使用这个库,开发者可以方便地在Python应用中集成Pusher的功能,包括创建和管理通道(channels)、发送事件(events)以及订阅接收事件。Pusher的API支持WebSockets、HTTP长轮询等多种实时通信协议,确保数据能在...

    Laravel开发-laravel-socketcluster

    创建一个事件(如`App\Events\NewMessageEvent`),然后创建对应的监听器(如`App\Listeners\BroadcastNewMessageListener`),在监听器中使用`Broadcast` facade将事件广播到WebSocket: ```php // ...

    Laravel开发-pusher .zip

    在前端,你需要使用Pusher的JavaScript库来订阅频道并监听事件。当接收到事件时,可以更新UI或其他相关操作。这通常在Vue.js、React或jQuery等前端库中实现。 这个压缩包“Laravel开发-pusher .zip”可能包含了以上...

    Laravel开发-realtime-push

    对于 `socket.io` 的集成,虽然题目中提到的是使用 Pusher,但值得一提的是,如果你选择使用 socket.io,流程大致相同,只是需要使用不同的库和配置。在 Laravel 中,你可以使用 `socket.io-laravel` 包,但在前端...

    Laravel开发-laravel-echo-driver

    在Laravel框架中,Laravel Echo驱动程序是一个关键组件,它使得实时通信变得简单而高效。这个组件主要用于实现WebSockets或Polling等推送技术,让应用能够实时更新用户界面,提升用户体验。在这个名为“laravel-echo...

    Laravel开发-pusher

    在前端,通常使用JavaScript库(如Pusher JavaScript SDK)来订阅频道并监听事件。通过创建一个`Pusher`实例,订阅之前在后端定义的频道,并监听对应的事件。 ```javascript var pusher = new Pusher('APP_KEY', { ...

    Mysql培训课件

    - **MySQL Cluster**:专为高可用性和高性能设计,通常与MySQL Community Server或MySQL Enterprise配合使用。 - **MySQL Workbench**:图形化工具,用于数据库的设计、管理和维护。 #### 五、MySQL的版本新功能 - ...

    Laravel开发-pusher-push-notifications

    它支持多种编程语言,包括PHP,这使得在Laravel中使用Pusher变得简单。开发者需要在Pusher官网上创建一个账户,然后获取应用程序的APP ID、APP KEY和APP SECRET,这些都是与Pusher通信时所需的凭证。 2. **安装...

    Nodejs概述

    1. **events模块**: 提供了一个简单的事件触发机制,通过`EventEmitter`类实现。 2. **基本用法**: - 创建`EventEmitter`实例。 - 注册监听器。 - 触发事件。 3. **事件类型**: 可以自定义事件类型,并为这些事件...

    Z-Stack2006应用举例

    SampleLight使用ZCL集群库中的属性来存储和交换灯具的状态信息,如亮度级别、颜色温度等。 **5.3.3 ZCL Callback Functions** 应用程序通过注册ZCL回调函数来响应来自远程控制器的操作命令。 **5.3.4 Key Presses...

    Laravel开发-pusher-mobile-notifications

    为了实现移动设备的通知,您可能需要使用 Firebase Cloud Messaging (FCM) 或 Apple Push Notification Service (APNS)。Pusher 提供了对这两种服务的支持。根据您的目标平台,您需要获取相应的 API 密钥或证书,并...

    Laravel开发-chat

    Laravel 是一个优雅、强大的 PHP 框架,它为开发者提供了丰富的工具和库,使构建复杂 Web 应用变得简单。聊天功能是许多现代 Web 应用的核心组成部分,它可以提升用户体验并促进用户之间的互动。 首先,我们需要...

    nodejs-learning:学习 Nodejs

    - **MongoDB**:NoSQL 数据库,通常与 Node.js 配合使用,通过 Mongoose 等库进行操作。 - **MySQL**:SQL 数据库,使用 Sequelize 或 TypeORM 等 ORM 工具进行 ORM(对象关系映射)操作。 8. **Web 框架与工具**...

    MySQL备份及同步利器-Clone Plugin的原理与实践-2019数据技术嘉年华.pdf

    - **Master-Slave备份**:相比传统的备份方式,使用Clone Plugin创建从库时,不需要额外的备份工具,也不需要SSH权限、rsync或scp等工具,更不需要处理binlog坐标,简化了备份过程并提高了效率。 - **添加slave/...

Global site tag (gtag.js) - Google Analytics