首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >如何使用Kubernetes做多人网络游戏与websocket?

如何使用Kubernetes做多人网络游戏与websocket?
EN

Stack Overflow用户
提问于 2017-10-26 10:57:43
回答 2查看 439关注 0票数 1

如果用websocket开发一个在线实时游戏,多人运行在不同的容器上,那么在添加或减少容器时,如何同步数据?

库伯内特斯在这个案子上有什么好的特点吗?

EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2018-01-05 02:29:26

ThatBrianDude已经给出了一个很棒的答案,而我的答案也不会那么好。但是,我认为你最后的评论给了我们更多关于您心目中的体系结构的提示。我希望我谦逊的回答能为你的游戏提供更多的想法。以下是一些建议:

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

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

那么,为什么不使用缓存和消息传递层来帮助您做到这一点呢?想象一下以下例子:

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

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

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

情况4:最终一个容器被杀死。连接到该服务器的客户端将收到连接错误,并应重新连接。这意味着另一次握手,玩家可能会感觉到,这取决于游戏所做的,所以杀死一个容器不应该经常发生。但仅此而已,任何信息都不会丢失。

这样,websocket服务器容器是完全无状态的,消息传递主题和缓存将帮助您:向容器提供所需的所有信息,并保持websocket、持久性和处理隔离和可伸缩。

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

  1. 客户端正在向websocket服务器容器提供操作。
  2. websocket服务器只是将它们发送到消息传递层。
  3. 处理容器(这也可以被放大!)接收这些消息,处理它们,保存到数据库和/或缓存中,并最终向其他主题发送更多的消息。
  4. (可选) websocket服务器接收这些消息并将它们发送给客户端。

或者像这样:

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

甚至像这样:

  1. 有些处理服务器与消息无关,它们只读取游戏/世界状态(从缓存?)周期性地
  2. 他们处理游戏的物理和力学。
  3. 并将结果保存回缓存中,该缓存将由websocket服务器定期发送给客户端,或者将其发送到主题中,以便websocket服务器能够侦听并发送给客户端。

最后,不要忘记让一台机器负责一个游戏/世界的建议。如果每个处理服务器(或服务器的每个线程)都能处理一个游戏/世界,那就太好了。这将使不需要同步的东西更容易持久化。

票数 3
EN

Stack Overflow用户

发布于 2017-10-26 11:04:52

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

这意味着游戏中可能存在的任何持续数据(高分等)。必须将其保存到持久的DB中,而其他临时数据,如当前的ingame、得分或昵称等,可以留在容器的内存中,并且在容器死后消失。

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

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

这是另一个完全不同的东西,但是你可能想看看SpatialOS,它可以容纳大量的多人世界,并且是为每个世界需要多台机器的游戏而设计的。

如果这不是你要寻找的,我建议你让一台机器负责一个游戏/世界,因为你将避免高复杂性,当你试图同步的东西以后。

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/46952537

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档