我正在运行一款MMORPG风格游戏的GameServer
从现在起,分布式系统始终包含:
整个项目是为了研究目的,因此,现在我想在网络编程方面迈出一步。
现在,我与GameServer通信的唯一方法是通过数据库,这对于用户注册或记录等操作很有效。
我想创建一个直接连接到游戏的API服务器,这可以提供更灵活的方式来提交和接收信息
我想到了一个通过socket连接到GameServer的node.js服务器。它将负责为Web服务器和其他服务提供REST API。
它还关心数据缓存。
我会问:
答案 0 :(得分:1)
我会以相反的顺序开始你的问题:
我的系统架构有效吗?什么是更好的方式(更多 有效的,可维护的或可用的)两者之间的沟通 机等。
通常,应用程序逻辑(游戏服务器)和数据库之间的分离是很好的第一步。对于真正的分布式系统,您可能需要另外考虑:可伸缩性(如果您拥有单个服务器无法处理的众多播放器会发生什么)和弹性(当游戏服务器或数据库机器死亡时您的游戏会发生什么)。对于这些主题,您需要考虑基于群集的系统。例如,如果要创建游戏服务器群集,可以使用kubernetes等基础结构来部署三个游戏服务器而不是一个游戏服务器。这将要求您的游戏服务器设计实现为无状态服务(数据库中唯一的状态存在)。例如,您的数据库可以类似地部署为kubernetes基础架构上的cockroachDB集群。
另外 - 关于使用Node.js的一些说法 - 这对于开发来说当然容易/方便,但不是最快的解决方案。我还建议调查go语言(golang),这对于这些任务非常有用,并且与C ++的速度大致相同。与C的连接也很棒。
与API服务器相关的安全问题可能是什么? 本身与游戏之间的联系。
您可能需要考虑使用API-Gateway来保护对游戏服务器和数据库的访问。 API网关还可以帮助缓存,记录,速率限制等。
为这种迭代实现什么可能是一个很好的协议? 或者我应该自己编写吗?
我通常会使用更高级别的协议,例如http。为了加快沟通速度,请查看Flat Buffers - 它可能是游戏的首选解决方案,可以直接在多种语言中使用。很可能不需要编写自己的协议。
我应该使用TCP还是UDP进行API和API之间的通信 游戏服务器?交换的数据只是最多几KB的文本。
见上一个答案。