ENet 特性
ENet 是一个具有 TCP 和 UDP 各自优点的基于 UDP 封装的一个网络库。
UDP 缺少排序,连接管理,带宽管理,包大小限制等。TCP 不能同时打开多个套接字故缺少多流的通信,并且由于其缓冲特性,其包管理机制过于复杂。
ENet 则致力于将 TCP 和 UDP 的优点结合实现一个统一的网络协议库。
连接管理 (Connection Management)
ENet 提供了一个简单的与外部主机通信的接口。连接的生命周期通过频繁的 ping 外部主机动态监管,同时通过主机与外部机器的包的往返时间和丢包情况来监管网络状况。
排序 (Sequencing)
ENet 提供了多个的合理排序的网络包流而不是一个单一的比特流从而简化了不同类型数据的传输。
ENet 通过为每个发送的网络包编号来实现对包的排序。这些序号会随着包的发送而增长。ENet 保证序列号低的包优先发送,从而确保了所有的网络包都按次序发送。
对于不可靠的网络包,如果具有高序号的网络包已经到达,ENet 则会简单的丢弃那些低序号的网络包。这样就保证了网络包到达后就可以立即被接收,从而减少了网络延时。对于可靠的网络包,如果一个高序号的包已经到达,但是之前的包确没有到达,ENet 会推迟高序号包的接受直到其之前相应序号的网络包均已到达。
通道 (Channels)
既然 ENet 会推迟可靠网络包的提交来确保网络包的序号,但是无论到达的包是可靠的还是不可靠的,如果之前的网络包是可靠的包,他们都要被推迟提交