23

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

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

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

所以,问题是...

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

3 回答 3

8

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

也看看这个:http: //developer.valvesoftware.com/wiki/Source_Multiplayer_Networking

于 2010-05-17T09:39:19.943 回答
7
  • 使用 UDP,而不是 TCP
  • 使用自定义协议,通常是定义“命令”的单个字节,以及包含命令参数的尽可能少的后续字节
  • 预测用于使其他玩家的动作看起来平滑,而不必为每一帧更新

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

于 2010-05-17T09:37:40.890 回答
6

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

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

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

于 2010-05-23T10:04:15.190 回答