node.js - 如何使用节点 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);
});
});
解决方案
推荐阅读
- flutter - Flutter 参数类型“Listenable”不能赋值给参数类型“Animation”
- reactjs - React.js:如何从 ag 网格中删除行?
- azure - Azure Web App - Azure AD - SPA - response_type 中缺少“令牌”
- python-3.x - 调试关于日期之间天数的函数
- tensorflow - tensorflow 1.15“m48”和tensorflow 1.15“m45”之间的启动区别是什么?
- reactjs - 如何在 React 数组映射中显示从 API 获取的数据
- java - 如何以螺旋形式打印不相等的行长矩阵?
- laravel - 使用 Laravel Join 与 Laravel Eloquent 获取用户未读消息
- android - 在 Android 应用中使用 Firebase 实时数据库时的长时间运行操作
- sql-server - SQL Server:对列的子字符串运行 CONTAINS