首页 > 解决方案 > 如何使用节点 js 子进程创建套接字 io 房间

问题描述

我正在尝试创建有 5 个成员的房间,他们经常以每 100 毫秒的频率在每个人之间共享数据。当我用 20 个房间部署这个逻辑时,CPU 利用率从 70% 变为 80%。所以我决定用这个子进程运行,但我不能用 socket io 实现子进程。如果有人有想法,请帮忙。谢谢

客户端脚本

socket = io("ws://localhost:52300", { transports: ["websocket"], reconnection: false });
socket.emit('joinRoom',{roomId:botsetId,player:player_id});

socket.on('updatePosition', function (data) {
        console.log(data);
    });

function updateData()
{
socket.emit('updatePosition', { "p": { "x": 0.5, "y": 0.357, "z": args.z }, "l": 20, "s": -0.01578048, "m": 6.809624, "a": 1, "c": 44.39658, "username": player_id,"roomId":socketRef[player_id].roomId });
}

服务器脚本

var multiplayer_server_port = (process.env.PORT || 52300)
var socket = require('socket.io')(multiplayer_server_port)

var app = require('express')();
var bodyParser = require('body-parser');
const { disconnect } = require('process');
var http = require('http').Server(app);
var port = 54500;

const {fork} = require("child_process") 

socket.on('connection',function(client){
    
    console.log('########-Making Connection With Client-########');

    const childProcess = fork('./updatePosition.js');
    childProcess.send({"number": parseInt(req.query.number)})
    childProcess.on("message", message => res.send(message))

    client.on('joinRoom',function(data){
        var roomId = 'SET_'+data.roomId;
        client.join(roomId);
        console.log('Player '+data.player+' Joined the room '+data.roomId);
        console.log(socket.sockets.adapter.rooms);
    });

    client.on('updatePosition',function(data){
        console.log(data);
        //client.broadcast.to('updatePosition',data);
        var roomId = 'SET_'+data.roomId;
        client.broadcast.to(roomId).emit('updatePosition',data);
    });
});

标签: node.jswebsocketsocket.iocpu-usagechild-process

解决方案


推荐阅读