网络游戏 采用的是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那样的完全可靠的机制,毕竟战斗中的同步速率很高,丢一个一般也没啥事情。语言组织能力欠佳,多包涵。
■网友
网络游戏用TCP还是UDP?都可以
魔兽世界用的是TCP还是UDP?《WoW》用了TCP协议,本地端口11348,远程端口8085
UDP发生丢包,怎么检测?无法检测
要么要求重新发给我一份
要么无视掉
■网友
看你要做什么游戏
可以容忍延迟并且有很好的屏蔽延迟的设计,如纸牌类和MMO,用TCP
不能容忍延迟,如DOTA类和动作类,用UDP
■网友
这只是协议。协议怎么都好。
TCP本身不是用于非可靠传输的,所以功能有限制。而UDP可以自己做很多工作,如果你愿意,也可以做到和TCP一样的结果。
现在都有库的,用一个就好了,也不麻烦。
如果一个游戏用TCP,说明那个游戏TCP提供的功能就够用了,仅此而已。非可靠传输必然会增加很多逻辑代码量的。
如果你用了TCP,那就必须全是可靠传输。但是你用UDP,依然可以大部分是可靠传输,少部分用非可靠传输。
所以,如果你犹豫的话,就用UDP好了。
■网友
本来UDP是最佳选择,然而 国内的网络啊,UDP 被故意丢包啥的真是家常便饭。
因此如果为了高峰期 游戏稳定。
建议Tcp(当然最好是优化过协议栈的)。
■网友
做一个检测和备份机制。
就是在交互协议里面先设计好,例如我交互,先发一个整体列表,告诉服务器,我要发包了,这次有100个包,序号按1-100.
然后发一个包,包头包体包尾,
在包头里面写我的包序号 sequence ID ,服务器收到包后进行检测,
这个序列是1-100,OK没问题。
如果发现,第56条数据没有,那么发信息给客户端,让他重发第56条数据。
具体的可能更复杂,我这只是对这一种情况的解决方案
■网友
网络游戏这个说的太笼统了,不同游戏的实时性要求完全不一样的,
TCP,UDP本质上差别在于TCP协议上实现的可靠性,UDP则没有,UDP协议就相对简单,TCP会复杂,也是就TCP协议开销本身比较大,对于实时游戏来说,是不合适的,实时游戏传递的数据量非常小,而又对实时响应要求很高。自然UDP更好;
比如:
棋牌类的,实时性几乎没有什么要求,延时1秒也不会有什么影响,那么TCP是可以的。
推荐阅读
- 咋自己发布网站
- 为啥房多多没像滴滴一样火?
- 趣头条|实用的代步工具,第三代哈弗H6!
- 补水|安全又补水,妈妈们都抢着用!这款给孩子用的高性价比面霜
- ibeacon目前在国内有已经应用或者商用的产品案例吗
- 《亿万》第九集里,法官用的这个搜索引擎是啥
- 新车|靠谱省油又耐用的品牌将推新款SUV,双色车身很帅气
- 怎样看待微软校招笔试使用的评测系统并不使用自家的产品
- 怎样统计工程中未使用的java类
- 应聘阿里巴巴国际站销售员