gpt4 book ai didi

multithreading - node.js 应用程序中单进程中的多线程 socket.io

转载 作者:搜寻专家 更新时间:2023-10-31 23:43:36 25 4
gpt4 key购买 nike

我一直在四处寻找,看看是否有其他人遇到过这个问题,但我预计不会,这就是我的发现。

我现在面临的问题与我正在构建的应用程序的架构有关; node.js 中的游戏服务器。截至目前,服务器以单个“管理器”进程启动,该进程控制所有子进程。游戏的每个“区域”或“区域”都使用单独的进程使用 cluster.fork() 启动,因此每个“区域”都可以在服务器上拥有自己的线程以优化能力服务器一次运行许多这些“区域”。

我现在面临的困境是这样的。由于每个“区域”都在一个线程中运行,并且该线程已经每秒运行 X 次复杂的 3D 数学以保持“区域”同步,我不想打开 Socket.io(通信用于在同一个线程中与游戏客户端交谈的库)。我想我挂断的地方在于在主进程中使用 cluster.on('message') 处理程序以及使用 将来自 Socket.io 的消息通过管道传输到主进程的性能process.send({...}).

我想看看是否还有其他人对此有经验,或者在基本层面上了解整个集群模块是如何工作的,本质上是这样的:

调用是否更快:

var io = require('socket.io').listen( 1337 );
io.sockets.on('connection',...); //map all the functionality here in the "zone" thread

或者做更像这样的事情:

var cluster = require('cluster');
var io = [];
//arbitrary number for the thread count, not important for theory testing
for( var i = 0; i < 4; ++i) {
var process = cluster.fork({...});
process.on('message',myRelayFunction);
io.push( process );
}

当然假设 cluster.fork() 调用通过管道传输到一个脚本中,该脚本除了打开一个 socket.io 连接并将来自各个客户端的消息中继到“区域”进程之外什么都不做.

我已经尝试对此运行性能测试,但我发现很难判断这是否更快,因为我很难通过连接使机器饱和以获取用于测试的输出。

我想确保这是可扩展的,以便在较重的负载下,应用程序可以充分利用服务器上的多个 CPU 内核。所以这当然是说我应该将 socket.io 监听器多线程化为多个线程,但我担心的是,由于它们在技术上都管道回单线程进程,这不会让我付出多线程的任何可能的性能提升吗-线程他们?我在这里的测试/基准测试部门有点空虚,我不知道所有这些工作背后的理论足以说明这里最好的基本方法是什么......所以我非常感谢任何反馈/输入任何人对此;)

最佳答案

我能够做一些更多的测试,似乎将 socket.io 监听器放在单独的线程中仍然对性能非常有益,即使它们必须通过管道将数据输入/输出单个“区域”(管理器)过程。这样服务器就可以使用单独的 CPU 来处理 IO 处理而不是区域处理。

所以这里的答案是肯定的,将您的监听器/套接字多线程化到单独的线程中仍然是有益的,即使所有这些线程都与单个线程进行通信以进行某些操作。这当然会导致我遇到的另一个问题,即如何最好地优化 node.js 中多个子进程之间的通信因为这是此过程中的下一个逻辑步骤/障碍,我将链接到下面的问题以防万一else 最终会在这个问题上跌跌撞撞。

Inter-child-process communication options in node.js cluster

关于multithreading - node.js 应用程序中单进程中的多线程 socket.io,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/14420979/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com