一、开启多进程

const os = require('os');
const cp = require('child_process'); const forkList = {};
const forkPrefix = 'fork_';
let cpusLen = os.cpus().length;
let port = 9562;
for (var i = 1; i <= cpusLen; i++) {
forkList[forkPrefix + i] = cp.fork(`${__dirname}/a.js`, [port]);
var childPid = forkList[forkPrefix + i].pid;
console.log("子进程Fork成功.Pid:" + childPid);
port++;
} // 监听子进程分发消息
var pid = process.pid;
for (var key in forkList) {
var forkObj = forkList[key];
var childPid = forkObj.pid;
forkObj.on('message', (m) => {
console.log('主进程ID:' + pid + ',子进程ID:' + childPid + ',message:', m);
send(m);
});
} // 轮询所有子进程消息发送
function send(m) {
for (var key in forkList) {
forkList[key].send(m);
}
}

二、启动websocket服务-------(a.js)

var pid = process.pid;
console.log('starting socket.io server......', pid); var argvs = process.argv.slice(2);
if (argvs.length <= 0) {
console.log("fork child params bad...");
return false;
} var port = argvs[0];
var server = require('http').createServer();
var io = require('socket.io')(server);
io.on('connection', function (socket) {
socket.on('router', function (data) {
console.log(data); // 把消息发送给主进程,由主进程分发给所有子进程
process.send(data);
}); socket.on('disconnect', function () { });
});
server.listen(port); // 监听由主进程分发消息
process.on('message', (m) => {
console.log('pid:' + pid + ',message:', m);
io.sockets.emit('router', m);
});

三、DEMO演示截图

1、服务端启动程序

2、客户端1

3、客户端2

4、客户端3

5、客户端4

NodeJs多进程和socket.io通讯-DEMO的更多相关文章

  1. Node中的Socket.IO 简单Demo及说明

    注:下面Demo的Server和Client都是纯后端. 并没有web页面. Server端代码: var express = require('express'); var app = expres ...

  2. 记一次结合PHP多进程和socket.io解决问题的经历

    公司是做棋牌游戏的.前段时间接到一个后台人工鉴定并处理通牌作弊玩家的需求,其中需要根据几个玩家的游戏ID查询并计算他们在某段时间内彼此之间玩牌输赢次数和输赢总额. 牌局数据是存储在日志中心的,他们把牌 ...

  3. 【Spring Boot】集成Netty Socket.IO通讯框架

    服务端 @Configuration public class NettySocketConfig { private static final Logger logger = LoggerFacto ...

  4. 9.nodejs权威指南--Socket.IO

    1. Socket.IO 1.1 服务器 var http = require('http'); var sio = require('socket.io'); var fs = require('f ...

  5. Nodejs npm安装socket.io报错解决办法

    安装socket.io时,报错,提示需要安装Microsoft visual studio 2005 或 Net framework 2.0 sdk,没有找到vcbuild.exe,解决办法是安装 . ...

  6. 前端笔记之微信小程序(四)WebSocket&Socket.io&摇一摇案例&地图|地理位置

    一.WebSocket概述 http://www.ruanyifeng.com/blog/2017/05/websocket.html Workerman一款开源高性能异步PHP socket即时通讯 ...

  7. Cannot find module 'socket.io'

    That's all. Then I try to use socket.io with this line: var io = require('socket.io').listen(app); A ...

  8. Socket.io+Nodejs通讯实例

    具体源码:Socket 目录结构 D:. │ package.json │ server.js │ └─public index.html socket.io.js 需要的条件 socket.io.j ...

  9. nodejs + socket.io + redis 新手上路

    最近要更新网站架构了,决定转入 nodejs + socket.io + redis 方式. 战斗刚开始: 网上的文章太松散,我根据各个网友的分享进行整理 ,让大家可以方便上手. 进入node.js之 ...

随机推荐

  1. 图片流Base64编码 转图片

    using System; using System.Drawing; using System.Drawing.Imaging; using System.IO; using System.Web; ...

  2. JAVA学习第五十七课 — IO流(十一)

    一.管道流 PipedInputStream 和 PipedOutPutStream 输入和输出能够直接进行连接.结合线程使用 管道流,顾名思义,写一个读一个.连成一个管子 API文档:管道输入流应该 ...

  3. Swift之UIBezierPath

    使用UIBezierPath可以创建基于矢量的路径.使用此类可以定义简单的形状,如椭圆.矩形或者有多个直线和曲线段组成的形状等.主要用到的该类的属性包括 moveToPoint: //设置起始点 ad ...

  4. 位图字体生成工具Bitmap Font Generator的使用

    首先,说下为什么要使用这款工具作为cocos2d-x的字体生成工具.其实cocos2d-x能使用的字体生成工具也有好几个,当然了本人也没有全部使用过,就不一一说明了.Bitmap Font Gener ...

  5. java 哈夫曼编码

    //哈夫曼树类 public class HaffmanTree { //最大权值 ; int nodeNum ; //叶子结点个数 public HaffmanTree(int n) { this. ...

  6. 查看Linux系统架构类型的5条常用命令

    导读 很多时候我们都需要查看当前 Linux 系统是 32 位还是 64 位系统架构类型,本文中我将向大家推荐 5 条常用命令.无论你使用的是桌面版或是只装了文本界面的 Linux 环境,以下命令几乎 ...

  7. iOS企业级开发者计划的申请流程

    第一步:访问苹果企业版iDP网址:https://developer.apple.com/programs/ios/enterprise/点击Apply Now按钮,开始申请流程. 第二步:点击App ...

  8. flume监控之ganglia

    对于日志来说,我觉得监控意义不大,因为写的速度一般不会特别快,但是如果是spooldir source,里面一小时放入十几G的数据让flume解析,特别是在结合kafka或者其他框架的话,监控就显得重 ...

  9. C# 自定义重绘DataGridView

    using System.Collections.Generic; using System.ComponentModel; using System.Diagnostics; using Syste ...

  10. C#三大支柱之多态

    1.包含与委托---has-a 2.嵌套类型(枚举.类.接口.结构等) 由于只有嵌套类才可声明为私有,通过嵌套类则可以完全控制内部类型的访问级别. 嵌套类型是包含类的成员,所有可以访问包含类的私有成员 ...