Node.Js多进程开启和socket.io通讯实现的代码是什么

Admin 2022-08-18 群英技术资讯 300 次浏览

很多朋友都对“Node.Js多进程开启和socket.io通讯实现的代码是什么”的内容比较感兴趣,对此小编整理了相关的知识分享给大家做个参考,希望大家阅读完这篇文章后可以有所收获,那么感兴趣的朋友就继续往下看吧!

一、开启多进程

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

 


以上就是关于“Node.Js多进程开启和socket.io通讯实现的代码是什么”的介绍了,感谢各位的阅读,如果大家想要了解更多相关的内容,欢迎关注群英网络,小编每天都会为大家更新不同的知识。
群英智防CDN,智能加速解决方案
标签: NodeJs多进程

免责声明:本站发布的内容(图片、视频和文字)以原创、转载和分享为主,文章观点不代表本网站立场,如果涉及侵权请联系站长邮箱:mmqy2019@163.com进行举报,并提供相关证据,查实之后,将立刻删除涉嫌侵权内容。

猜你喜欢

成为群英会员,开启智能安全云计算之旅

立即注册
专业资深工程师驻守
7X24小时快速响应
一站式无忧技术支持
免费备案服务
免费拨打  400-678-4567
免费拨打  400-678-4567 免费拨打 400-678-4567 或 0668-2555555
在线客服
微信公众号
返回顶部
返回顶部 返回顶部
在线客服
在线客服