Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/node.js/35.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/0/docker/9.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Architecture node.js多人游戏服务器体系结构_Architecture_Node.js - Fatal编程技术网

Architecture node.js多人游戏服务器体系结构

Architecture node.js多人游戏服务器体系结构,architecture,node.js,Architecture,Node.js,假设你正在制作一台德州Hold'em服务器。我们有一个大厅和多个房间,在这里可以进行游戏。你们在什么楼层分开房间 起初,我认为应该为大厅中的每个房间生成一个node实例。主要的好处是,如果一个游戏崩溃,它肯定会孤立地这样做 当我意识到聊天服务器通常作为管理多个聊天室的单个守护进程运行时,我对这种方法失去了信心。大厅里的每个房间都需要一个单独的监听端口,这看起来确实很难看。我认为跨房间管理身份也会变得更容易——例如,如果玩家更改他们的名字 有什么想法吗?“多路复用”单个节点服务器以管理多个游戏室会

假设你正在制作一台德州Hold'em服务器。我们有一个大厅和多个房间,在这里可以进行游戏。你们在什么楼层分开房间

起初,我认为应该为大厅中的每个房间生成一个node实例。主要的好处是,如果一个游戏崩溃,它肯定会孤立地这样做

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


有什么想法吗?“多路复用”单个节点服务器以管理多个游戏室会话是否有意义?

从技术上讲,您不需要监听每个游戏室的单独端口。这是可能的,因为操作系统支持父进程和子进程共享相同的套接字(文件)描述符。您可以使用节点模块来实现这一点。使用此体系结构,您可以自动获得一个负载平衡模块,该模块可以使用OS process scheduler将传入连接分发到不同的子进程

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


我建议您首先使用单节点进程体系结构构建系统(如果您要使用websocket,您已经可以处理相当多的并发连接),然后当您需要扩展系统时,使用webworker体系结构。此外,如果您已经使用一个公共位置来存储/检索数据(数据库、memcached、redis密钥库……),那么迁移不会花费太多时间

我将推荐您的申请。它是允许多个节点进程通过事件进行对话的框架

我会有一个单独的服务器来管理所有的事情。我会让每个人进入一个路径,比如/rooms/123,然后用相同的代码处理所有请求。你打算如何让游戏崩溃?你觉得那像什么?这意味着什么?