实时数据传输架构

问题描述 投票:0回答:1

我有一个游戏系统的概念,其中包括(最好是)Java服务器和多平台客户端(Web,Android,iOS)。

这是1vs1玩家对玩家实时游戏。 服务器执行2位玩家的比赛。 因此,基本上服务器需要处理许多包含2个玩家的比赛。 两个玩家都更改相同的数据,并且每个玩家都应使用其他玩家的动作实时更新。

你能建议我:

1)服务器端框架/库将简化实现,因为我宁愿不从头开始学习node.js。 :) Vert.x浮现在脑海。

2)客户应该保留数据的副本并在本地进行更改(这意味着仅传输的数据仅是命令,在这里我认为JMS是很好的解决方案),或者仅服务器应更改数据,然后每隔一次发送完整的数据集时间发生变化了吗?

3)应该如何传输数据? 考虑到多平台需求,我认为可行的只有WebSockets。

4)服务器处理WebSocket连接配对的示例/教程? 我所发现的只是一对一的连接。

5)考虑到可伸缩性,您能否解释一下这些在分布式环境中如何工作?

java websocket real-time scalability
1个回答
1
投票

1)我认为node.js没什么大不了的。 我个人更喜欢一个广为人知的框架。

2)如果您考虑使用移动设备,则第一种选择似乎听起来更合理。 您应该在游戏过程中考虑发送/推送增量,并且仍然提供功能以在客户端断开连接并使用相同ID连接时检索游戏的完整状态。

3)WebSocket是最好的选择。 推送方式,TLS选项并得到很好的支持 。 另一个选择是WebRTC数据连接,大多数情况下是对等2对等。 我经常说的是,如果其中一个用户位于动态NAT路由器或限制性防火墙的后面,则将不可能,并且您将需要TURN(中继)服务器。 无论如何, 不如WS 受支持

4)你不应该“配对websockets”。 WS连接仅向您的逻辑输入命令,然后您的逻辑将事件广播给任何需要的人。 尽管是1vs1游戏,您可能还是希望检查事件流以进行进一步的调试或分析。 因此,将WS视为一种传输方式,而不是一个实体。

5)非常非常非常广泛的问题。 但是,假设您将使用WS,并且您的应用程序将非常成功,因此您将需要多个服务器...假设无法预测两个用户将连接到同一服务器,因此您应该考虑一条消息允许从一台服务器播放用户和另一台服务器上的用户的总线。 EDA(事件驱动架构)将很有意义。

© www.soinside.com 2019 - 2024. All rights reserved.