网络游戏 采用的是tcp协议还是udp协议? | 您所在的位置:网站首页 › udp协议速度 › 网络游戏 采用的是tcp协议还是udp协议? |
最近在搞这方面,分享点心得,不对请指正。 实时战斗游戏的话还是要用UDP了,因为TCP的特性,一旦丢包就会重发,阻塞住后续的数据包,因而可能会产生一个较大的瞬时延迟。 魔兽世界据说是用TCP。可能因为魔兽世界的游戏设计能很好的隐藏延迟,TCP用起来更简单些。 关于丢包检查,可以采用一个近似TCP的ack机制,可以给每个数据包都添加一个sequence ID,然后发送端就依次发送数据包,接收端收到数据包后就可以根据sequence ID来判断是否有丢包了。 接下来是重点,接收端需要发该sequenceID的ack给发送端,发送端才会知道这个包是否已经送达。但这是一笔不小的开销,而且,ack本身也有可能丢包。 可以这样,发送一个sequence ID的ack时,附加一个32bit的位序列,表示当前sequence ID之前的32个连续顺位的数据包是否已经送达,其实就是冗余的发送连续32个包的送达状态,如果bit为0说明这个包还没到,如果为1,说明已经收到了。这样一来,除非连续丢包30多次,ack是一定会送到的,这种几率已经非常小了。 相应的,在发送端设置一个超时机制,这个时间差不多比连续发30个ack的时间长一点,如果发送一个包后开始计时,达到超时还没有收到ack,这个包就丢失了。 但即使丢包了也不一定需要重发!是否需要重发,如何重发可以和游戏的逻辑结合起来,没有必要实现类似TCP那样的完全可靠的机制,毕竟战斗中的同步速率很高,丢一个一般也没啥事情。 语言组织能力欠佳,多包涵。 |
CopyRight 2018-2019 实验室设备网 版权所有 |