网络游戏客户端如何能够如此快速地通过互联网交换数据?
Posted
技术标签:
【中文标题】网络游戏客户端如何能够如此快速地通过互联网交换数据?【英文标题】:How online-game clients are able to exchange data through internet so fast? 【发布时间】:2011-02-20 08:00:46 【问题描述】:让我们想象一下非常简单的游戏...我们有一个迷宫和两个玩家试图通过互联网实时找出出口。
在每一步游戏客户端都应该将玩家的坐标发送到服务器并接受另一个客户端的当前坐标。怎么可能使这种交换如此之快(就像所有现代游戏一样)。
好的,我们可以使用memcache或类似的技术来减少服务器端的数据挖掘操作。我们也可以使用最快的网络服务器等,但我们仍然会遇到时间问题。
所以,问题是……
-
游戏客户端通常使用什么协议与服务器交换信息?
有哪些服务器技术可以解决这个问题?
什么算法适用于游戏中的延迟战斗等。
【问题讨论】:
【参考方案1】:通常使用网络插值和预测。 Gamedev 是一个很好的资源:@987654321@
也可以看看这个:http://developer.valvesoftware.com/wiki/Source_Multiplayer_Networking
【讨论】:
Valve 仍然按照论文描述的方式进行操作。【参考方案2】: 使用 UDP,而不是 TCP 使用自定义协议,通常是定义“命令”的单个字节,并且包含命令参数的后续字节尽可能少 预测用于使其他玩家的动作看起来流畅,而不必为每一帧更新提示:无论如何都会使用预测来平滑快速的屏幕更新 (~60fps),因为实际游戏速度通常较慢 (~25fps)。
【讨论】:
这不像使用UDP over TCP那么简单。 TCP 为您提供了许多非常有用的功能,如果您使用 UDP,则必须自己构建这些功能。 TCP 只有在丢包的情况下才会出现问题,这在当今相当罕见。许多大型 MMO 使用 TCP。仅当数据包之间偶尔出现长时间延迟(由于丢失数据包的重新发送)而导致游戏失败时才需要 UDP。在决定使用 UDP 之前,请三思而后行。 Robert:UDP 用于很多很多在线 FPS 游戏——它只是最快的可用网络协议,因为您不想等待 TCP 重新发送数据包并检查队列完整性。如果所讨论的游戏不需要某种完整的完整性检查并且需要可用的最快响应时间,我认为答案是有效的。【参考方案3】:其他答案并没有在原帖中说明几个重要的误解,即这些游戏不是网站并且运作方式完全不同。特别是:
没有或很少需要“数据挖掘” 被加速。最快的在线 游戏(例如第一人称射击游戏) 通常不保存任何东西 比赛期间的磁盘。上网速度较慢 游戏,例如 MMO,可能会使用 数据库,主要用于存储 球员信息,但对于大多数 他们在内存中保存玩家和世界数据的一部分, 不在磁盘上。 他们不使用 网络服务器。 HTTP 比较慢 协议,甚至单独的 TCP 也可以 对于某些游戏来说太慢了。相反,他们 有专门为该特定游戏编写的定制服务器。这些服务器通常针对低延迟而不是吞吐量进行调整,因为它们通常不会像 Web 服务器那样提供大文档,而是提供许多微小消息(例如,以字节而不是千字节为单位)。解决了这两个问题后,您的速度问题就基本消失了。您可以向服务器发送消息并在 100 毫秒内得到回复,并且每秒可以执行多次。
【讨论】:
以上是关于网络游戏客户端如何能够如此快速地通过互联网交换数据?的主要内容,如果未能解决你的问题,请参考以下文章