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的端口确实会受影响。
MS Windows是默认使用老办法的唯一平台。为了达到性能最优,Node.js在Windows上使用了IOCP。尽管这在大多数情况下都不错,但这样将HANDLE对象(连接)发送给其它进程代价十分高昂。 尽管有可能在libuv中解决这个问题,但我们还不清楚是否真的有必要这么做:Windows的端口几乎不会受到负载均衡问题的影响,而Linux和Solaris的端口确实会受影响。
相关推荐
使用这个库,开发者可以方便地在Python应用中集成Pusher的功能,包括创建和管理通道(channels)、发送事件(events)以及订阅接收事件。Pusher的API支持WebSockets、HTTP长轮询等多种实时通信协议,确保数据能在...
创建一个事件(如`App\Events\NewMessageEvent`),然后创建对应的监听器(如`App\Listeners\BroadcastNewMessageListener`),在监听器中使用`Broadcast` facade将事件广播到WebSocket: ```php // ...
在前端,你需要使用Pusher的JavaScript库来订阅频道并监听事件。当接收到事件时,可以更新UI或其他相关操作。这通常在Vue.js、React或jQuery等前端库中实现。 这个压缩包“Laravel开发-pusher .zip”可能包含了以上...
对于 `socket.io` 的集成,虽然题目中提到的是使用 Pusher,但值得一提的是,如果你选择使用 socket.io,流程大致相同,只是需要使用不同的库和配置。在 Laravel 中,你可以使用 `socket.io-laravel` 包,但在前端...
在Laravel框架中,Laravel Echo驱动程序是一个关键组件,它使得实时通信变得简单而高效。这个组件主要用于实现WebSockets或Polling等推送技术,让应用能够实时更新用户界面,提升用户体验。在这个名为“laravel-echo...
在前端,通常使用JavaScript库(如Pusher JavaScript SDK)来订阅频道并监听事件。通过创建一个`Pusher`实例,订阅之前在后端定义的频道,并监听对应的事件。 ```javascript var pusher = new Pusher('APP_KEY', { ...
- **MySQL Cluster**:专为高可用性和高性能设计,通常与MySQL Community Server或MySQL Enterprise配合使用。 - **MySQL Workbench**:图形化工具,用于数据库的设计、管理和维护。 #### 五、MySQL的版本新功能 - ...
它支持多种编程语言,包括PHP,这使得在Laravel中使用Pusher变得简单。开发者需要在Pusher官网上创建一个账户,然后获取应用程序的APP ID、APP KEY和APP SECRET,这些都是与Pusher通信时所需的凭证。 2. **安装...
1. **events模块**: 提供了一个简单的事件触发机制,通过`EventEmitter`类实现。 2. **基本用法**: - 创建`EventEmitter`实例。 - 注册监听器。 - 触发事件。 3. **事件类型**: 可以自定义事件类型,并为这些事件...
SampleLight使用ZCL集群库中的属性来存储和交换灯具的状态信息,如亮度级别、颜色温度等。 **5.3.3 ZCL Callback Functions** 应用程序通过注册ZCL回调函数来响应来自远程控制器的操作命令。 **5.3.4 Key Presses...
为了实现移动设备的通知,您可能需要使用 Firebase Cloud Messaging (FCM) 或 Apple Push Notification Service (APNS)。Pusher 提供了对这两种服务的支持。根据您的目标平台,您需要获取相应的 API 密钥或证书,并...
Laravel 是一个优雅、强大的 PHP 框架,它为开发者提供了丰富的工具和库,使构建复杂 Web 应用变得简单。聊天功能是许多现代 Web 应用的核心组成部分,它可以提升用户体验并促进用户之间的互动。 首先,我们需要...
- **MongoDB**:NoSQL 数据库,通常与 Node.js 配合使用,通过 Mongoose 等库进行操作。 - **MySQL**:SQL 数据库,使用 Sequelize 或 TypeORM 等 ORM 工具进行 ORM(对象关系映射)操作。 8. **Web 框架与工具**...
- **Master-Slave备份**:相比传统的备份方式,使用Clone Plugin创建从库时,不需要额外的备份工具,也不需要SSH权限、rsync或scp等工具,更不需要处理binlog坐标,简化了备份过程并提高了效率。 - **添加slave/...