今天的一些游戏使用通过UDP传输消息的网络系统,并确保消息可靠和有序.
例如,RakNet是一种流行的游戏网络引擎.它仅使用UDP进行连接,并且有一个完整的系统,以确保数据包可靠,并在您选择时进行排序.
我的基本问题是,那是什么?TCP是否与有序,可靠的UDP相同?是什么让人们不得不基本上重新发明轮子?
TCP是一种通用的可靠系统
UDP +无论什么是特殊用途的可靠系统.
对于他们专业的东西,专门的东西通常比通用的东西更好.
TCP是基于流的
UDP是基于消息的
发送离散游戏信息地图通常更适合基于消息的范例.通过流发送它是可能的,但非常无效.如果要可靠地发送大量数据(文件传输),TCP非常有效.这就是Bit-torrent使用UDP控制消息和TCP用于数据发送的原因.
大约一年前,我们在"传说联盟"中从可靠转为不可靠,因为有几个优点已被证明是真实的:
1)旧信息变得无关紧要.如果我发送一个健康数据包但它没有到达...我不想等到同一个健康数据包重新发送,当我知道它已更改.
2)订单有时不是必需的.如果我向不同的系统发送不同的消息,则可能没有必要按顺序获取这些消息.我不强迫客户端等待有序消息.
3)不可靠不会备份消息...即等待确认,这意味着您可以更快地解决损失峰值.
4)您可以在必要时更有效地控制重新发送.比如重新打包没有发送到另一个数据包的东西.(TCP会重新打包,但您可以通过有关程序运行方式的知识更有效地完成.)
5)消息的流控制,例如丢弃在网络突然出现时不太相关的消息.当您遇到损失峰值时,网络系统可以选择不重新发送不太相关的消息.使用TCP,您仍然有一个尝试重新发送的消息队列,这可能是较低的优先级.
6)较小的头部数据包......实际上并不需要说太多.