13

MMORPG 客户端/服务器通信中如何使用 UDP 和 TCP 协议?

例如:

客户端是否通过 UDP 向服务器广播(玩家位置等)?或相反亦然?

还是更像是在客户端请求服务器移动播放器时使用 TCP。服务器接收到请求,移动播放器并向客户端返回播放器现在位于 xyz 位置?

聊天频道必须使用 TCP 实现吗?

有没有这方面的好文章/书籍?我找到了零碎的东西,但似乎真正的肉和土豆是从经验中获得的。

4

9 回答 9

8

许多游戏使用 UDP 进行与运动相关的活动——因此,例如,当你走路时,很可能会发送一堆 UDP 请求。服务器仍然最终控制这是否有效,但您不必关心每个数据包是否到达服务器。这就是为什么很多游戏客户端也使用某种预测机制的原因。

就您的第二次提及而言,是的,所有控件都由服务器管理是很常见的。您不希望客户端向服务器广播任何内容;您应该在服务器端进行错误和输入处理,以防止人们被黑客入侵。您还可以限制每秒输入。

无论如何,UDP 和 TCP 的组合是合适的——你只需要问自己,“我想要可靠性还是速度?”

于 2008-10-17T18:44:28.913 回答
4

有许多不同的可能实现,但在大多数情况下,它们看起来像这样。这种模式在游戏世界中几乎所有动作都会重复出现。

  1. 客户端与玩家想要移动的服务器进行通信。
  2. 客户端根据它认为应该发生的情况显示玩家移动。
  3. 鉴于玩家的位置,服务器会验证移动是否可能发生。
  4. 就服务器而言,服务器向客户端更新玩家所在的位置。
  5. 客户端更新玩家位置以反映服务器的世界状态。
于 2008-10-17T18:45:03.683 回答
4

您不能依赖客户传递真实信息。有人会破解协议并作弊。加密数据不会阻止这一点——只是让它更难做。

客户端应该只发送移动请求等,服务器需要对请求进行健全性检查,以确保它们不违反游戏规则。服务器应该只发回客户端绝对需要的数据——你不能依赖客户端来获取大量的世界数据,而只是过滤掉玩家当前无法观察到的所有内容。有人会掌握额外的信息并加以利用。

如果游戏需要“实时”,那么客户端需要假设服务器将允许移动请求并相应地更新显示 - 如果服务器稍后更正它,则回滚移动。在大多数情况下,客户端和服务器会达成一致,一切都会顺利进行。当客户试图作弊时(无论如何这是他们的错),他们不会同意 - 或者客户由于连接不良而严重滞后(您对此无能为力)。

于 2008-10-17T18:45:36.600 回答
1

您的一半问题(使用的传输层协议)可以通过安装wireshark 并查看流量来回答。

于 2008-10-17T18:39:04.400 回答
1

您可能对Project Darkstar感兴趣。这是一个开源的 MMO 框架。

于 2008-10-17T18:45:33.933 回答
1

我认为您可以从阅读其他人如何实现这些类型的系统中学到很多东西。徒劳无功,我可以向您指出蒂姆·斯威尼(Tim Sweeney)和槌球联盟( The Croquet Consortium )的工作

  1. 虚幻网络架构
  2. 槌球项目

Tim Sweeney 的论文改变了我对编程的看法。我不能推荐他们。

于 2008-10-17T18:58:26.717 回答
0

除了作为玩家的观察之外,我不知道任何细节,但大多数游戏绝对不会等待服务器回复来移动角色,除非它是基于回合制的,否则会扼杀用户体验。看起来发生的事情是移动在客户端完成并发送到服务器,然后服务器将这些消息发送给其他玩家。至少在《魔兽世界》中,如果玩家落后,您可能会看到他们仍在向前移动,然后稍后神奇地出现在另一个位置,这对我来说意味着客户端收到的不仅仅是位置数据,还有他们正在移动以及他们移动的方向然后在没有进一步数据的情况下推断运动。

于 2008-10-17T18:39:47.800 回答
0

你最好的选择可能是看看 Planeshift 的网络代码,它是一个开源的 MMO。我相信它是现场最发达的(最后我检查过)。

于 2008-10-17T18:44:06.590 回答
0

我认为这个问题没有一个简短的单一答案,它的范围相当广泛。尽管如此,还是有几点:

  • 没有必要仅仅因为您使用 UDP 而“广播”。根据我的经验,UDP 大部分时间都是点对点的。
  • 完全可以通过 UDP 进行自己的“安全”通信,而不必使用 TCP。这并不神奇,只是……聪明而复杂。:) 但在大多数情况下,正如您所暗示的那样,TCP 不适合游戏中的实时通信。
  • 有一些方法可以使 TCP 更适合,例如搜索“Nagle 算法”。
  • 如果您已经在其上推出了自己的无损传输协议,则可以通过 UDP 进行聊天。很多游戏都这样。

Gamasutra 有关于网络的文章,但我现在没有任何方便的链接。不确定它们是否仍然公开可用,抱歉。

于 2008-10-17T18:46:00.267 回答