Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/macos/8.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
为游戏服务器和相关API服务器设计分布式系统_Api_Sockets_Networking_Architecture_Protocols - Fatal编程技术网

为游戏服务器和相关API服务器设计分布式系统

为游戏服务器和相关API服务器设计分布式系统,api,sockets,networking,architecture,protocols,Api,Sockets,Networking,Architecture,Protocols,我正在运行一个MMORPG风格的游戏服务器。 从现在起,分布式系统始终包含: CAMESEVER本身,用C++编写 游戏服务器的数据库服务器,运行MySQL 运行PHP站点的Web服务器,仅通过共享访问数据库与游戏服务器交互。 用于备份和日志记录的其他随机服务器 整个项目都是为了学习,因此,现在我想在网络编程方面迈出一步 现在,我唯一能与GameServer通信的方法就是通过数据库,它可以很好地用于用户注册或登录等操作。 我想创建一个直接连接到游戏的API服务器,它可以允许以更灵活的方式提交和接

我正在运行一个MMORPG风格的游戏服务器。 从现在起,分布式系统始终包含:

CAMESEVER本身,用C++编写 游戏服务器的数据库服务器,运行MySQL 运行PHP站点的Web服务器,仅通过共享访问数据库与游戏服务器交互。 用于备份和日志记录的其他随机服务器 整个项目都是为了学习,因此,现在我想在网络编程方面迈出一步

现在,我唯一能与GameServer通信的方法就是通过数据库,它可以很好地用于用户注册或登录等操作。 我想创建一个直接连接到游戏的API服务器,它可以允许以更灵活的方式提交和接收信息。 我想到了一个node.js服务器,通过套接字连接到游戏服务器。它将负责向Web服务器和其他服务提供RESTAPI。 它还关心数据缓存

我想问:

API和游戏服务器之间的通信应该使用TCP还是UDP?交换的数据将仅为最大数KB的文本。 对于这种迭代,什么协议可以很好地实现?还是我应该自己写? 拥有API服务器可能会有什么安全问题,与服务器本身和游戏之间的连接有关。 我的系统架构有效吗?有什么更好的方法可以更高效、可维护或可用地在两台机器之间进行通信。
我将以相反的顺序开始提问:

我的系统架构有效吗?还有什么更好的办法吗 有效、可维护或可用于两者之间的通信 机器

一般来说,应用程序逻辑游戏服务器和数据库之间的分离是很好的第一步。对于一个真正的分布式系统,你可能需要另外考虑:如果你有这么多玩家,一个服务器无法处理和恢复你的游戏在游戏服务器或数据库机器死机时会发生什么样的伸缩性。对于这些主题,您需要考虑基于集群的系统。例如,如果您想要创建一个游戏服务器集群,您可以使用类似于部署三个游戏服务器而不是一个游戏服务器的基础设施。这将要求您的游戏服务器设计实现为无状态服务—数据库中只存在状态。例如,您的数据库可以类似地部署为kubernetes基础设施上的蟑螂集群

另外,关于使用Node.js的几句话对于开发来说当然很容易/方便,但不是最快的解决方案。我也建议研究一下GO语言,它对于这些任务非常有用,并且具有与C++相同的速度。而且与C的连接也很好

拥有一个API服务器可能会有什么安全问题 自身与游戏之间的联系

<>你可能想考虑使用AN来保护对游戏服务器和数据库的访问。API网关还可以帮助缓存、日志记录、速率限制等

对于这种迭代,什么协议可以很好地实现? 还是我应该自己写

我通常会使用更高级别的协议,比如http。为了更快的交流,还可以研究一下——它可能是游戏的首选解决方案,可以直接从多种语言中使用。编写自己的协议很可能不是必需的

我应该使用TCP还是UDP在API和 游戏服务器?交换的数据将仅为最大数KB的文本


请参阅前面的答案。

谢谢!!!!你让我大吃一惊!我不知道有这么多有用的图书馆。关于使用围棋的建议也引起了我的兴趣。关于可伸缩性,我应该了解如何通过考虑这一方面来设计软件。我认为有很多书在外面更好地解释了这种编程方式。