gpt4 book ai didi

architecture - node.js多人游戏服务器架构

转载 作者:搜寻专家 更新时间:2023-11-01 00:26:55 24 4
gpt4 key购买 nike

假设您正在制作德州扑克服务器。我们有一个大厅和多个房间,游戏 session 在其中进行。您在哪一层分隔房间?

最初我以为我会为大厅中的每个房间生成一个 Node 实例。主要好处是,如果游戏崩溃,它肯定会孤立地发生。

当我意识到聊天服务器通常作为管理多个房间的单个守护进程运行时,我对这种方法失去了信心。大堂的每个房间都需要一个单独的监听端口,这看起来确实很丑陋。我认为跨房间管理身份也变得更加容易 - 例如,如果玩家更改了他们的名字。

有什么想法吗? “多路复用”单个 Node 服务器来管理多个游戏室 session 是否有意义?

最佳答案

从技术上讲,您不需要监听每个房间的单独端口。这是可能的,因为操作系统支持父进程和子进程共享相同的套接字(文件)描述符。您可以雇用 WebWorker Node 模块来实现这一点。使用此架构,您会自动获得一个负载平衡模块,该模块可以使用操作系统进程调度程序将传入连接分配给不同的子进程。

但是,对于您的系统,最困难的部分是如何在这些进程之间共享公共(public)数据,因为它们有自己的内存空间。幸运的是,有一些方法可以共享这些数据(在线 session 、房间、分数表……),但它们可能非常复杂。一种方法是让子进程通过 IPC(套接字)与主进程通信,另一种方法是使用每个人都可以随时访问的共享内存区域(数据库、memcached...)。

我建议你首先使用单 Node 进程架构构建你的系统(如果你打算使用 websocket,你已经可以处理相当大的并发连接数),然后当你需要扩展你的系统时,使用 webworker建筑学。此外,如果您已经使用一个公共(public)位置来存储/检索数据(数据库、memcached、redis keystore ...),则迁移不会花费太多时间。

关于architecture - node.js多人游戏服务器架构,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/6166526/

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