在构建多人游戏时,开发人员经常面临两难境地。我是否利用现有的欧洲游戏服务器为多人游戏功能提供支持来运行聊天?我是否分开我的欧洲游戏服务器并独立运行我的聊天?因为,毕竟,它们只是聊天消息,对吧?发送给单个用户或小组的小消息,因此您不妨利用已经构建的内容……这会造成什么伤害?
尽管最初利用您已有的东西似乎是一个不错的选择,但选择该设计模式可能会出现许多问题。我将向您展示为什么您应该独立运行您的欧洲游戏服务器和社交功能(最重要的是聊天),这对您作为游戏开发人员和您的最终用户都有好处。这样做,您将提高游戏本身的性能和可扩展性,并且您将允许社交功能在未来通过新功能轻松扩展。
微服务让您的游戏更易于管理
面向微服务的架构将大型应用程序(在本例中为您的游戏)分解为小型、独立版本化的模块化服务,这些服务通过简单、普遍可访问的 API 相互通信。它使构建新功能和维护构建后的功能变得更加容易。
将您的欧洲游戏服务器与您的聊天功能分开可以使您的整个基础架构更易于管理,并使您更接近完全面向微服务的架构。在这种情况下,让我们专门看一下游戏内聊天,它与为多人游戏提供动力的欧洲游戏服务器的关系。
借助单体架构,您的开发团队现在被锁定在一个单一的技术堆栈中——使用游戏已经构建的相同编程语言、数据库和软件环境。当引入新的开发人员时,或者当您想要对新技术和系统进行原型设计时,在微服务架构中快速移动要容易得多。
依赖关系在单体架构中也更加明显。如果您的单个应用程序功能失败,整个游戏就会失败。将您的游戏拆分为微服务可以更轻松地隔离故障并在单个模块发生故障时修复它。
您的欧洲游戏服务器是为实时传递玩家运动和状态而构建的,而且它们做得非常好。为聊天消息重新使用相同的技术和设计根本就是没有为特定功能使用最佳选项。分散的组件更易于维护,并且可以更好地扩展。此外,我们还可以在欧洲游戏服务器之外运行其他服务,包括授权、存在、统计和排行榜。
确保无缝的游戏体验和聊天性能
总的来说,游戏性能是多人游戏的主要考虑因素。缓慢的游戏体验会赶走用户,他们将永远不会回来。使用单体架构,游戏可以在实验室中执行。但是对于在世界任何地方拥有大量用户的多人游戏,所有用户同时快速通信,您将开始看到聊天消息传递和游戏体验的延迟和增加的延迟。
将两者分开可确保更有效地使用 CPU 和网络资源。欧洲游戏服务器的主要目的是为游戏中的每个用户提供无缝体验。因此,应该使用处理能力来最大化该性能。
假设您有一个在线战斗竞技场游戏,例如英雄联盟或 EVE Online。您可能在一个世界中同时拥有数百名玩家。这是通过您的欧洲游戏服务器发送的数千条消息,传递每个玩家创建的每个输入。现在,将聊天消息添加到组合中。玩家完全有可能向聊天频道发送垃圾邮件并故意降低欧洲游戏服务器的速度,因为所有消息都具有相同的优先级。当然,可以检查此类用户,但您需要进行额外的处理,这会消耗欧洲游戏服务器的资源。
欧洲游戏服务器已经在处理密集的游戏体验——物理、图形和声音。当您添加聊天消息(一对一、群组、团队)并解析消息并将其路由给正确的用户时,所有这些消息都会慢慢为大型游戏积累,并损害游戏的整体性能。将聊天频道与多人频道分开运行是不费吹灰之力的。它正在窃取比路由聊天消息更适合解决更复杂问题的重要处理能力。
UDP 与 TCP:当你需要两者时,当你不需要时
然后是多人游戏协议、UDP 与 TCP 以及何时最好使用其中一个的争论。快节奏的多人游戏(第一人称射击游戏、竞技场游戏等)使用 UDP 协议来同步玩家移动和更新游戏状态。UDP 非常适合以快得离谱的速度发送这些游戏更新,但不能保证消息(因为下一条消息来得太快了)。
TCP 保证消息传递,这使其成为聊天的绝佳选择。您将看到在 UDP 上运行游戏和在 TCP 上运行社交功能的出色性能。但是,对于不太激烈的多人游戏,例如回合制游戏,TCP 是游戏和聊天的合适选择。因为 TCP 保证消息传递,并且在每一步都很重要的游戏中(例如拼字游戏转身或井字游戏),它是为多人游戏提供动力的绝佳选择。当然,您仍然希望将聊天与欧洲游戏服务器分开,尤其是当您的游戏开始运行并且您同时连接了数千名用户时。
延迟是另一件需要考虑的事情,因为多人游戏功能与社交功能有不同的延迟标准。对于多人游戏,确保游戏状态并传递玩家输入,行业标准不超过 20 毫秒。而对于聊天应用程序,发送聊天消息的最大延迟为 250 毫秒。所以你有两种不同类型的实时消息,有两种不同的标准。让它们单独运行可以让您根据需要管理每一个。
轻松添加新的社交功能
将聊天作为独立服务运行,并选择行业标准协议(XMPP、WebSockets)或托管服务(PubNub),为轻松添加新的强大社交功能提供了机会。从核心聊天开始,允许用户进行个人和群聊。有了它,您就拥有了底层基础架构以及基本的发布/订阅。您可以轻松地在其上构建许多其他社交功能。
使用最少的代码,您可以添加桌面赌注聊天功能,例如打字指示器、用户状态以显示哪些玩家在线和离线,以及未读消息计数器 - 用户期望的功能。
期待
大大小小的游戏工作室都在朝着这种架构设计方向发展,包括Pocket Gems和最近的EVE Online。从更好的可扩展性和更高效的性能,到不局限于单一堆栈的自由创新,好处是显而易见的:将聊天与欧洲游戏服务器分开是必经之路。