一、开启多进程

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. 【摘要】获得HTML元素的绝对位置

    function findAbsolutePosition(obj) { var curleft = curtop = 0; if (obj.offsetParent) { do { curleft ...

  2. 你真的会使用SQL Server的备份还原功能吗?之二:主要备份类型

    假设在下面几个时间段中,一个数据库积累插入了如下数据: 1.完整数据库备份 故名思意,完整数据库备份包括完整的数据库信息.它包括数据库的数据文件和备份结尾的部份活动事务日志. 完整备份基本语法如下: ...

  3. 死锁相关 变量 与 PURGE 线程停止

    http://www.tuicool.com/articles/NzAFZn https://github.com/percona/percona-server/pull/83/commits/091 ...

  4. 《转》Java中HashMap详解

    HashMap 和 HashSet 是 Java Collection Framework 的两个重要成员,其中 HashMap 是 Map 接口的常用实现类,HashSet 是 Set 接口的常用实 ...

  5. archlinux locale-gen 命令出错

    如果运行locale-gen命令出现以下的错误“locale alias file `/usr/share/locale/locale.alias' not found: No such file o ...

  6. C Primer

    如果主函数使用void main(),由于它不是当前标准强制的一个选项,因此在有些系统上不能工作,为了使代码变得简单,main函数中可以没有返回语句. 先声明变量是为了防止拼写错误导致定义一个新的变量

  7. jQuery.inArray 方法的实现

    jQuery.inArray(value, array) 如果 value 在 array 中,则返回该 value 所在的位置.否则返回 -1.这个简单的函数实际上是模拟 Array.prototy ...

  8. java 考试试题

    Java基础部分 基础部分的顺序:基本语法,类相关的语法,内部类的语法,继承相关的语法,异常的语法,线程的语法,集合的语法,io 的语法,虚拟机方面的语法,其他.有些题来自网上搜集整理,有些题来自学员 ...

  9. Android 在onActivityResult()中设置图片setImageResource(resId) 或者改变view属性,不成功的解决办法

    如果试验过的朋友就会发现,在onActivityResult()中设置这些属性,好像都不工作,虽然我死磕一番还是不知道具体原因,我直接默认它可能就是不能在里面设置,所以就只能在其他地方设置,幸好发现A ...

  10. SQL Server 表和索引存储结构

    在上一篇文章中,我们介绍了SQL Server数据文件的页面类型,系统通过96个字节的头部信息和系统表从逻辑层面上将表的存储结构管理起来,具体到表的存储结构上,SQL Server引入对象.分区.堆或 ...