了解网络交付方法?

问题描述


我目前正在学习如何创建一个自定义 UDP 协议来像 TCP 一样在快节奏的多人游戏中更快地传输数据。

我已经掌握了基础知识,但不明白什么时候应该使用每种交付方式。

他们是:

  • 不可靠 (UDP) - 实时移动、快节奏动作
  • ReliableOrdered (TCP) - 非实时事物、聊天消息、分数更新
  • UnreliableSequenced - IP 语音/视频
  • Reliableunordered - 独立状态更新、收集物品等
  • ReliableSequenced - 非实时视频流

我理解前两个。 Unreliable 只是普通的 UDP,ReliableOrdered 是 TCP,但是,什么时候应该使用这些。

我假设 ReliableOrdered 将用于游戏聊天之类的内容,而 Unreliable 将用于移动/战斗,但其他 3 个呢?

我喜欢学习网络,因为这是一个巨大的挑战,我希望我能找到答案吗?

谢谢

解决方法

通常情况下,您只会在游戏中使用 TCP 和 UDP 协议,除非您包括已经涵盖的语音聊天。

UDP 涵盖了可能不断变化的内容,并且不特别关心是否有一点错误余地。它们也通常在不同时间的客户端上进行模拟,例如玩家四处移动时在地图上的位置。您可以存储一个方向,但要定期更新以确保客户不会看到完全不同的东西。

TCP 通常用于其他一切,尤其是当它涉及用户输入或对控件的影响时。所有这些不频繁或重要的更新。

话虽如此,大多数游戏引擎会将多个变量更新打包到一个数据包中,该数据包每 0.2 秒左右发送一次,而不是每帧发送一次。这是为了防止网络泛滥,根据游戏引擎,通常称为网络更新,在正常游戏循环期间有条件地跳过。

一般来说,推送到 UDP 的次数越多越好,因为网络影响较小,但通常无法做到,或者说不切实际。