以前公司用过TNL,又有RakNet也是 UDP的。但是,不知道各个库在吞吐量、CPU占用、内存占用量/性能/碎片等方面的详细数据。
另,UDP相对TCP响应更快?请给出实际数据(分别采用TCP或UDP处理同一问题的测试对比数据,越多越好,谢谢!)。
下面是各家的理论:
1:
感觉UDP和TCP用在不同的地方,UDP用在像打枪之类的游戏,TCP可能更多用于像网络RPG之类的。
2:
这个方面早就有人比较过乐,还有数据分析和结论。
UDP适合不考虑丢包点多媒体应用。TCP适合大块数据传输和安全性要求较高点场合。
3:
对于实时性要求比较高的游戏,必须要UDP!
比较一下盛大的疯狂赛车和跑跑卡丁车就知道了!
4:
具体的有测试数据的。我手头上有本TCP/IP高级编程上有测试数据。你可以找来看看。
疯狂赛车是TCP的。没有用UDP。性能也是可以接收的。
跑泡卡丁车我了解不多。
5:
to
SevenCat:现在好像有种趋势,大家习惯用UDP模拟的TCP,尤其是3D游戏(那就好像是说吞吐量更大),比较不解。
to
sunway:方便贴一下相关数据吗?(我有一同事他的UDP数据经计算为12Mbits/s,而我用TCP的计算为大于60Mbit/s,不过,我的CPU%100了(不知道分散会如何),他说他CPU占有很小。当然,数据都是局域网的,我的还是基于本机。)
to
Oscar:实时性高一定要用UDP,何因?如何证明UDP可以和实际比TCP更响应快(TCP的窗口机制和超时机制都是经过长期考验的比较完善的实现,而UDP就我所知,也就能略微节省包头和“无序暂存”——这个名字是我取的,大致应该能表达意思。而对于超时和窗口机制也同样要实现了)。
6:
现在UDP比较火的原因是现在的MMORPG风险比较大,大家都开始做休闲游戏,休闲游戏一般实时性要求比较高。所以大家都开始用UDP来传输数据提高响应时间。UDP还有个好处就是单机能带更多的用户,在单连接数据量比较小的情况下,TCP单机带个3K用户就顶天了,UDP可能带个1W用户都很正常。
我说的数据是我上面说的那本书(非电子书)上的,你有兴趣可以去书店找那本书。
7:
有两个问题:
1.
UDP响应时间更快的事实“直接证据”,内部原因(应该不是TCP要保证有序,而UDP可以无序,因此不用维护顺序,没有这个开销吧。就我所知的,现在的UDP基本都是用的它的模拟TCP,也就是保序的。)?
2.
UDP为什么可以比TCP带的多呢(如我前面所说,也就是相对节省包头,而要实现保序、模拟连接,实际能省却下了的包头大小估计也就最多能省4个字节(本来相差也就12个包头字节,而相对整个协议头IP:20,UDP:12,真的是微不足道,还不能补应用层浪费(我所见过的设计,个人认为都能省却大量数据不用传输)——这个可能我理解有误,还请纠正);显然,广播是不能用的,也还是TCP的连接机制。)?
附:
我知道的TNL的超时机制那和TCP真的就不是一个档次的(TNL是定时的轮询,TCP会根据网络状况动态调整);RakNet没有了解,它的机制不了解。也就是说,UDP模拟TCP应用,还不一定做的好,而且,往往比TCP做的差。
找书,我就先不找了。不妨先介绍一下,可否告知大致对比信息和大致结论呢。
8:
你说的这些问题可以去找那3本TCP/IP详解的书看看,看完就都明白了。
Reply Reply with quote » Rate this post: Text for clearing space
9:
是的,我觉得比较的意义不大了,
就像JAVA和C++,需要什么,或者自己想做什么,
那就去做了。
与其自己在这里疑惑,不如去撞几个跟头。
PS:盛大的疯狂赛车就是TCP的,我当时看后吃了一惊,因为他们甚至没有客户端互联,
不知道现在改了没有:)
跑跑卡丁车好像是泡泡堂那个公司做的。所以应该和泡泡堂一样的,UDP
+ TCP
游戏时UDP互连,平常和服务器连接的时候使用TCP。(我记得是这样:))
本文探讨了TCP与UDP在网络游戏中应用的区别,包括它们在吞吐量、CPU占用率、内存消耗等方面的表现,并分析了不同游戏类型(如射击游戏与角色扮演游戏)对这两种协议的不同需求。

5976

被折叠的 条评论
为什么被折叠?




在RPG范畴内的 UDP应用太少了
正如很多人说的 UDP模拟TCP如果做的不好带来的是更大的负面效果
如果诸位真的希望采用UDP 与其自己写 不如采用RAKNET等比较成熟的库 而对于TNL我个人建议放弃不管从任何角度来说此库都已经过时了 (小弟拙见) 其实在不同的网络环境中 效果是不同的
就像我们不能说UDP在高PING值下的环境仍然高效 他是否会比TCP做的重发更多呢?
这个我们不得而知啊
但是我认为TCP和UDP是不同领域的产物,依照项目而定制自己所采用的技术才是王道
其实异步做好 包优化到位 TCP是一样高效的
我们可以用JAVA + FLEX + TCP做一款万人在线的虚拟社区 (企鹅社区)所以TCP并非那么无可救药,而UDP也并非很多人说的那么神奇
还有就是代码的优化和可读性,维护性,如果使用UDP去模拟TCP那么可能带来的更多后果是UDP的代码浪费
对于发送方来说,tcp需要等待 ack 才确认发送成功.