TCP还是UDP,网络游戏应该用哪种协议

总结起来就是:实时性非常强的游戏,并且研发周期相对较长有充足时间开发的游戏,建议用UDP。否则用TCP。

原因如下:

1.根据各个论坛大家的经验,用检测工具检测,流行的大型网络游戏用TCP和UDP的都有。也有的是client发送给server用TCP,server发给client用UDP(大航海时代)
2.普遍的推荐是,实时性非常强的游戏(FPS游戏如CS)才需要用UDP,因为要尽量减少延迟,TCP特有的可靠处理机制导致丢包重发会有较大的延迟。否则用TCP,例如MMORPG游戏用TCP,棋牌类游戏更不必说就是用TCP。
3.著名开源网络引擎RakNet用的是UDP实现,但它同时注明了UDP有很多的麻烦,RakNet用了很多方法来克服这些麻烦。
http://gafferongames.com/networking-for-game-programmers/udp-vs-tcp/这篇文章讲得不错,说明了为什么实时性强的网络游戏(CS等)需要用UDP而不是TCP。

4.但UDP协议因为太过基础,如果不是购买商业级网络引擎而是自行开发,会在这上面花费很大的人力并且还不一定达到低延迟的效果,在研发周期短压力大情况下更是如此。如果这样那还不如TCP,简单稳定,干脆直接,毕竟TCP是经过了周密设计和多年考验。对玩家来说,偶尔的延迟或许比较讨厌,但总掉线或出错可就是难以忍受了。

 

其实TCP不适合实时性强的游戏,就一个原因:TCP在遇到丢包重传时延迟较大,约1.5倍ping值时长。实时性强游戏其实不需要重传,直接使用新包的状态即可。

TCP在遇到丢包时,重传策略是接收方发回3个重复的ACK(注意不是定时器重传,重传定时器触发的重传是非常罕见的,因为各系统TCP重传定时器一般都是设置为好几秒,只有在网络极端拥塞或完全断开时才会出现好几秒不回ACK)。因此从丢包到TCP重传,约等待了3次发送的时间,也就是1.5倍的ping值,相对于实时性游戏延迟有点长。http://gafferongames.com/networking-for-game-programmers/udp-vs-tcp/这篇文章讲得不错,也说明了为什么实时性强的网络游戏(CS等)需要用UDP而不是TCP。

但现在的网络发生了很大的革新和改进,丢包率到底有多少还需要实际测量。如果实际测量表明丢包率很小,只要<0.1%,以每秒50个包来看,20秒才会出现一次丢包,等待1.5倍ping值时长,就不会有什么大影响。另外现在的网速很快,延时短,例如vs对战平台上ping值一般是10~50ms,1.5倍的ping值其实可以接受。

 

所以总结起来就是:实时性非常强的游戏,并且研发周期相对较长有充足时间开发的游戏,建议用UDP。否则用TCP。

  • 8
    点赞
  • 24
    收藏
    觉得还不错? 一键收藏
  • 4
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 4
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值