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

时间:2010-05-17 09:34:00

标签: game-engine multiplayer mmo online-game

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

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

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

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

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

3 个答案:

答案 0 :(得分:8)

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

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

答案 1 :(得分:5)

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

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

答案 2 :(得分:3)

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

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

考虑到这两个问题,你的速度问题基本消失了。您可以向服务器发送消息并在100毫秒内得到答复,并且可以每秒多次执行此操作。