NodeJs多进程和socket.io通讯-DEMO

一、开启多进程

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

时间: 2024-08-08 09:25:22

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

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

安装socket.io时,报错,提示需要安装Microsoft visual studio 2005 或 Net framework 2.0 sdk,没有找到vcbuild.exe,解决办法是安装 .NET Framework 2.0 Software Development Kit (SDK) http://www.microsoft.com/en-us/download/details.aspx?id=15354 并将 C:\Program Files\Microsoft Visual St

Nodejs 中使用Socket.io

安装socket.io npm install socket.io 或者在package.json文件中添加socket.io的依赖包,然后npm install安装所需模块. 在Express http服务器中使用socket.io 在 bin/www 文件中添加: var io = require('socket.io'); var socket = io.listen(server); socket.on('connection', function(client) { console.l

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

注:下面Demo的Server和Client都是纯后端. 并没有web页面. Server端代码: var express = require('express'); var app = express(); var server = require('http').createServer(app); var io = require('socket.io')(server); //定义变量,用来存储socket.如果是多进程的话,那么socket可以考虑存入redis中 var socket

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

1. Socket.IO 1.1 服务器 var http = require('http'); var sio = require('socket.io'); var fs = require('fs'); var server = http.createServer(function(req,rsp){ rsp.writeHead(200,{'Content-Type':'text/html'}); rsp.write('success'); }); server.listen(12345)

学习nodejs+express+angular+socket.io ,投票demo

最新对nodejs感兴趣,通过学习网上的nodejs例子,把别人的例子自己敲了一遍.虽然别人都有现成的代码.但自己敲出来之后还是会有一些小bug.然后通过慢慢的学习.终于把这个例子给跑起来了.记录一下. 环境: 安装nodejs ,下载地址 https://nodejs.org/en/ 安装mongodb,官网上下载地址被墙了(不能说mongodb官网被墙了,是官网上引用了google上的jquery库被墙了,导致网页上的js报错,下载按钮出不来). 这是官网地址:https://www.mon

基于socket.io客户端与服务端的相互通讯

socket.io是对websocket的封装,用于客户端与服务端的相互通讯.官网:https://socket.io/. 下面是socket.io的用法: 1.由于使用express开的本地服务,先下载相关依赖 cnpm install express socket.io 2.服务端代码 const express = require("express"); const io = require("socket.io"); const app = express(

nodejs socket.io

今天练习使用nodejs socket.io实现聊天室功能 已经做到功能: 1.自己发送信息在聊天室里出现: 2.自己的信息显示"我:",其他人的信息显示其id: 3.进入退出聊天室会有系统提醒: 想做的功能: 1.根据id进行1对1的聊天: 2.创建组进行小范围讨论: 3.在bootstap里找个好看的prompt弹窗: 经验总结: 1.nodejs 中 express跟http的关系似乎像 jq和js一样,express可以替代http var express = require(

基于Node.js + socket.io实现WebSocket的聊天DEMO

原文摘自我的前端博客,欢迎大家来访问 http://hacke2.github.io 简介 最近看Node.js和HTML5,练手了一个简易版的聊天DEMO,娱乐一下 为什么需要socket.io? node.js提供了高效的服务端运行环境,但是由于浏览器端对HTML5的支持不一, 为了兼容所有浏览器,提供卓越的实时的用户体验,并且为程序员提供客户端与服务端一致的编程体验, 于是socket.io诞生. 简答来说socket.io具体以下特点: 1.socket.io设计的目标是支持任何的浏览器

node.js和socket.io纯js实现的即时通讯实例分享

在这个例子中,其实node.js并没有真正起到服务器的作用,因为我们这里可以直接运行client.html文件,而不用输入url请求,当 然,要想输入url请求页面内容还需要加入请求静态文件的代码.这个实例中node.js最重要的作用就是将服务端迁移到了js,实现了客户端和服务端语 言上的统一,我们只要在浏览器上同时运行两个client.html客户端页面,即可进行简单的即是通讯了,socket.io才是我们真正用来实现即时 通讯的消息的收发. var server = http.createS