问题描述
我目前正在学习如何创建一个自定义 UDP 协议来像 TCP 一样在快节奏的多人游戏中更快地传输数据。
我已经掌握了基础知识,但不明白什么时候应该使用每种交付方式。
他们是:
- 不可靠 (UDP) - 实时移动、快节奏动作
- ReliableOrdered (TCP) - 非实时事物、聊天消息、分数更新
- UnreliableSequenced - IP 语音/视频
- Reliableunordered - 独立状态更新、收集物品等
- ReliableSequenced - 非实时视频流
我理解前两个。 Unreliable 只是普通的 UDP,ReliableOrdered 是 TCP,但是,什么时候应该使用这些。
我假设 ReliableOrdered 将用于游戏聊天之类的内容,而 Unreliable 将用于移动/战斗,但其他 3 个呢?
我喜欢学习网络,因为这是一个巨大的挑战,我希望我能找到答案吗?
谢谢
解决方法
通常情况下,您只会在游戏中使用 TCP 和 UDP 协议,除非您包括已经涵盖的语音聊天。
UDP 涵盖了可能不断变化的内容,并且不特别关心是否有一点错误余地。它们也通常在不同时间的客户端上进行模拟,例如玩家四处移动时在地图上的位置。您可以存储一个方向,但要定期更新以确保客户不会看到完全不同的东西。
TCP 通常用于其他一切,尤其是当它涉及用户输入或对控件的影响时。所有这些不频繁或重要的更新。
话虽如此,大多数游戏引擎会将多个变量更新打包到一个数据包中,该数据包每 0.2 秒左右发送一次,而不是每帧发送一次。这是为了防止网络泛滥,根据游戏引擎,通常称为网络更新,在正常游戏循环期间有条件地跳过。
一般来说,推送到 UDP 的次数越多越好,因为网络影响较小,但通常无法做到,或者说不切实际。