实时数据传输架构

时间:2014-04-15 13:38:02

标签: java websocket real-time scalability

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

这是1vs1玩家对战玩家的实时游戏。服务器执行2个玩家的对决。所以基本上服务器需要处理包含2个玩家的许多匹配。两位玩家都会改变相同的数据,并且应该通过其他玩家的动作实时更新每个玩家。

你能建议我:

1)服务器端框架/库可以简化实现,因为我不想从头开始学习node.js。 :)想到Vert.x。

2)如果客户端持有数据的副本,并在本地更改它(意味着只传输的数据只是命令,这里我将JMS看作是一个好的解决方案),或者只应该服务器更改数据然后发送完整的数据每次发生变化时都会设置数据?

3)如何传输数据?考虑到多平台要求,我认为唯一可行的是WebSockets。

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

5)考虑到可扩展性,您能解释一下在分布式环境中这一切是如何工作的吗?

1 个答案:

答案 0 :(得分:1)

1)我不认为node.js是如此重要的学习。我个人更喜欢一个众所周知的 - 广泛使用的框架。

2)如果你正在考虑移动,可能第一个选项似乎更健全。您应该考虑在游戏过程中发送/推送增量,并且仍然提供检索游戏的完整状态的功能,以防客户端断开连接并使用相同的ID连接。

3)WebSocket将是最佳选择。推送方法,TLS选项和well supported。另一种选择是WebRTC数据连接,大多数时候是对等2对等。我大部分时间都说,因为如果其中一个用户位于动态NAT路由器或限制性防火墙之后,则无法实现,并且您将需要一个TURN(中继)服务器。无论如何,it is less supported比WS。

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

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