如何使用Kubernetes与websocket进行多人在线游戏?

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

如果使用websocket开发在线实时游戏,在不同容器上运行多重播放器,如果在播放时添加或减少容器,如何同步数据?

kubernetes在这种情况下有什么好的功能吗?

docker websocket kubernetes containers real-time
2个回答
3
投票

ThatBrianDude已经给出了一个很棒的答案,我的不会那么好。但我认为your last comment给了我们更多关于你想到的建筑的暗示。我希望我的谦虚回答能够为你的游戏提供更多的想法。以下是一些建议:

首先,避免在websocket应用程序中保留任何状态。

容器的基本思想是它们应该是无状态的。 ThatBrianDude

那么,为什么不使用缓存和消息传递层来帮助您。想象一下以下示例:

情况1:如果客户端向websocket服务器发送操作,则服务器应将其放入队列/主题(稍后其他一些服务将处理它)。

情况2:服务器还可能侦听某些类型消息的(某些)主题,并将它们发送回需要该信息的客户端。

情况3:当客户端要求提供信息或者websocket服务器需要将某些信息发送到客户端时,服务器必须从缓存中读取它,因为从DB读取数据可能对于多人游戏来说很慢。

情况4:最终一个容器被杀死。连接到该服务器的客户端将收到连接错误,并应重新连接。这意味着另一次握手,玩家可能会感觉到它,这取决于游戏的作用,因此杀死容器不应该经常发生。但那就是它,没有信息丢失。

这样,websocket服务器容器完全是无状态的,消息传递主题和缓存将帮助您:提供容器所需的所有信息,以及;保持websockets,persistance和处理隔离和可扩展。

总而言之,信息会像这样流动:

  1. 客户正在使用动作来淋浴websocket服务器容器
  2. websocket服务器只是将它们发送到消息传递层
  3. 处理容器(可以缩放到!)接收这些消息,处理它们,保存到数据库和/或缓存,最后将更多消息发送到其他主题
  4. (可选)websocket服务器接收这些消息并将它们发送给客户端。

或者像这样:

  1. 客户要求提供信息或websocket服务器定期需要将世界状态发送给客户
  2. websocket服务器在缓存中查找信息
  3. 并将其发送给客户。

或者甚至像这样:

  1. 有些处理服务器独立于消息,它们只是定期读取游戏/世界状态(来自缓存?)
  2. 他们处理游戏的物理和机制
  3. 并将结果保存回缓存中,缓存将由websocket服务器定期发送给客户端,或者在主题中发送,以便websocket服务器可以监听它并将其发送给客户端。

最后,不要忘记让一台机器负责一个游戏/世界的建议。如果每个处理服务器(或服务器的每个线程)与一个游戏/世界一起工作将会很好。这样可以更轻松地持久化而无需同步内容。


0
投票

容器的基本思想是它们应该是无状态的。

这意味着您的游戏可能拥有的任何持久性数据(高分等)必须保存到持久性数据库,而其他临时数据(如当前游戏名称或昵称等)可以保留在容器的内存中,并在容器死亡后消失。

如果在播放时添加或减少容器,如何同步数据?

这听起来像你想用多个容器计算一个游戏世界?

这是另一个独立的野兽,但你可能想看看SpatialOS,它几乎允许大型多人游戏世界,并设计用于每个世界需要多台机器的游戏。

如果那不是你想要的东西,我会建议你让一台机器对一个游戏/世界负责,因为当你稍后尝试同步时你会避免高度复杂。

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