在线游戏客户如何通过互联网如此快速地交换数据?

Kir*_*lla 15 multiplayer mmo online-game game-engine

让我们想象一下非常简单的游戏...我们有一个迷宫和两个玩家试图通过互联网实时退出.

在每个移动游戏中,客户端应该将玩家的坐标发送到服务器并接受另一个客户端的当前坐标.怎么可能如此快速地进行这种交换(就像所有现代游戏一样).

好的,我们可以使用memcache或类似技术来减少服务器端的数据挖掘操​​作.我们也可以使用最快的网络服务器等,但我们仍然会遇到时间问题.

所以,问题是......

  1. 什么协议游戏客户端通常用于与服务器交换信息?
  2. 有哪些服务器技术可以解决这个问题?
  3. 什么算法用于在比赛期间与延迟战斗等.

小智 8

通常采用网络插值和预测.Gamedev是一个很好的资源:http://www.gamedev.net/reference/list.asp?categoryid = 30

另请查看以下内容:http://developer.valvesoftware.com/wiki/Source_Multiplayer_Networking


Kyl*_*tan 6

其他答案并没有阐明原始帖子中的几个重要误解,即这些游戏不是网站并且操作方式完全不同。特别是:

  • 没有或几乎没有需要加速的“数据挖掘”。最快的在线游戏(例如第一人称射击游戏)通常不会在比赛期间将任何内容保存到磁盘。较慢的在线游戏,例如 MMO,可能会使用数据库,主要用于存储玩家信息,但在大多数情况下,它们将玩家和世界数据保存在内存中,而不是磁盘上。
  • 他们不使用网络服务器。HTTP 是一种相对较慢的协议,对于某些游戏,即使单独使用 TCP 也可能太慢。相反,他们有专门为该特定游戏编写的定制服务器。通常,这些服务器针对低延迟而不是吞吐量进行了调整,因为它们通常不像 Web 服务器那样提供大文档,而是提供许多小消息(例如,以字节而不是千字节为单位)。

解决了这两个问题后,您的速度问题就基本消失了。您可以向服务器发送消息并在 100 毫秒内得到回复,并且每秒可以执行多次。


o0'*_*0'. 5

  • 使用UDP,而不是TCP
  • 使用自定义协议,通常是定义"命令"的单个字节,以及包含命令参数的尽可能少的后续字节
  • 预测用于使其他玩家的动作看起来平滑,而不必为每一帧获得更新

提示:无论如何都使用预测来平滑快速屏幕更新(~60fps),因为实际游戏速度通常较慢(~25fps).

  • 罗伯特:UDP 用于许多在线 FPS 游戏——它只是最快的可用网络协议,因为您不想等待 TCP 重新发送数据包并检查队列完整性。如果有问题的游戏不需要某种完整的完整性检查并且需要可用的最快响应时间,我认为答案是有效的。 (2认同)