我有一个游戏系统的概念,其中包括(最好)Java 服务器和多平台客户端(Web、Android、iOS)。
这是一款 1vs1 玩家对玩家的实时游戏。服务器进行 2 名玩家的对决。所以基本上服务器需要处理许多包含 2 名玩家的比赛。两个玩家都会更改相同的数据,并且每个玩家都应该根据其他玩家的操作实时更新。
你能建议我吗:
1)服务器端框架/库可以简化实现,因为我不想从头开始学习node.js。 :) 我想到了 Vert.x。
2) 客户端是否应该保存数据的副本,并在本地更改它(意味着传输的数据只是命令,在这里我认为 JMS 是一个很好的解决方案),或者应该仅服务器更改数据,然后发送完整的数据每次发生变化时数据集?
3) 数据应该如何传输?考虑到多平台要求,我认为唯一可行的是 WebSocket。
4) 服务器处理 WebSocket 连接配对的示例/教程?我发现的只是一对一的联系。
5)考虑到可扩展性,您能否解释一下这一切如何在分布式环境中工作?
最佳答案
1) 我认为学习 Node.js 没什么大不了的。我个人更喜欢一个众所周知的、广泛使用的框架。
2) 如果您正在考虑移动设备,可能第一个选项似乎更合理。您应该考虑在游戏期间发送/推送增量,并且仍然提供检索游戏完整状态的功能,以防客户端断开连接并使用相同的 ID 连接。
3) WebSocket 将是最好的选择。推送方法、TLS 选项和 well supported 。另一种选择是 WebRTC 数据连接,大多数情况下是对等的。我说大多数时候是因为如果其中一个用户位于动态 NAT 路由器或限制性防火墙后面,则这是不可能的,并且您将需要一台 TURN(中继)服务器。无论如何,it is less supported比WS。
4) 你不应该“配对 websockets”。 WS 连接只需向您的逻辑输入命令,然后您的逻辑将事件广播给它想要的任何人。尽管是 1vs1 游戏,您可能希望检查事件流程以进行进一步的调试或分析。因此,请将 WS 视为一种传输,而不是一个实体。
5)非常非常广泛的问题。但是假设您要使用 WS,并且您的应用程序将非常成功,您将需要多个服务器...假设不可能预测两个用户将连接到同一台服务器,因此您应该考虑一条消息允许将一台服务器上的用户与另一台服务器上的用户一起播放的总线。 EDA(事件驱动架构)是有意义的。
关于java - 实时数据传输架构,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/23085399/