如果使用websocket开发在线实时游戏,并且多人游戏在不同的容器上运行,那么如果在玩游戏时添加或减少容器,如何同步数据?
kubernetes在这种情况下是否有任何好的功能?
最佳答案
ThatBrianDude已经给出了一个了不起的答案,而我的回答不会那么好。但是我认为your last comment给了我们关于您所考虑的体系结构的更多提示。我希望我的谦虚答案能为您的游戏带来更多创意。这里有一些建议:
首先,避免在websocket应用中保持任何状态。
因此,为什么不使用缓存和消息传递层来帮助您呢?想象以下示例:
情况1:如果客户端将操作发送到websocket服务器,则服务器应将其放入队列/主题(其他一些服务稍后会对其进行处理)。
情况2:服务器可能还会侦听某些邮件主题,并将其发送回需要该信息的客户端。
情况3:当客户端要求信息或websocket服务器是否需要一些信息发送给客户端时,服务器必须从缓存中读取信息,因为从多人游戏中读取数据库可能很慢。
情况4:最终一个集装箱被杀死。连接到该服务器的客户端将收到连接错误,并应重新连接。这意味着要进行另一次握手,并且玩家可能会感觉到这种握手,具体取决于游戏正在执行的操作,因此,杀死容器不应该经常发生。就是这样,不会丢失任何信息。
这样,websocket服务器容器是完全无状态的,并且消息传递主题和缓存将帮助您:向容器提供所需的所有信息;以及使网络套接字,持久性和处理保持隔离和可扩展。
总结起来,信息将像这样流动:
或像这样:
甚至像这样:
最后,不要忘记建议由一台机器负责一个游戏/世界的建议。如果每个处理服务器(或服务器的每个线程)都可以与一个游戏/世界一起工作,那就太好了。这样可以更轻松地保留事物,而无需同步内容。
关于docker - 如何使用Kubernetes与Websocket进行多人在线游戏?,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/46952537/