困惑的QQ:既然有了TCP长连接为什么还要用UDP来中转数据呢?

lanbing598235681 2011-09-25 10:05:10
奇怪的一点,既然QQ登录后,服务器和客户端之间都会保留一个TCP长连接用于保持用户的在线状态,为什么数据中转不通过这条TCP链路中转呢,而非要用UDP协议来中转,还加上什么辅助算法来确保安全性(难道不需要占用额外的资源吗),理由说是,UDP较TCP快,服务器端只有采用UDP协议与客户端进行通讯才能保证这种超大规模的服务(TCP长连接不是在了吗,资源已经被占用了),有必要吗,真的是这样吗?


...全文
7648 51 打赏 收藏 转发到动态 举报
写回复
用AI写文章
51 条回复
切换为时间正序
请发表友善的回复…
发表回复
wanglovec 2014-04-13
  • 打赏
  • 举报
回复
很多人把P2P 理解成了 点对点 ,, 也许他的UDP 用作音视频的传输? 在目前的网络条件下 如果聊天信息用udP来传 那得丢多厉害??然后他在自己重发么? 显然 不会是这样
这不是鸭头 2014-03-24
  • 打赏
  • 举报
回复
UDP在这方面,比TCP要有利多了。中国网络环境还是比较复杂的。UDP可以更好的利于自己的控制。
这不是鸭头 2014-03-24
  • 打赏
  • 举报
回复
引用 40 楼 applemacosx 的回复:
分析一下QQ你就会发现,QQ登录时会发送请求给服务器,QQ的服务器并不是一直监听客户端,反之是通过30秒的一个时间间隔来确定客户端是否还在,这个主要的以客户端完成,30秒以内客户端会和服务器握手,告诉服务器我还在,状态正常,而服务器会记录下这个时间,如果30后再次收到客户端握手则维护当前状态,如果收不到则表示客户端掉线了。然后服务器清除当前客户端的状态和注销用户。这就是为什么如果我们是退出QQ,对方很快就看到我们下线了,不超过五秒,但是如果我们的网络出现故障意外断线了,对方要看到你下线需要在大约30-40秒之后。所以使用UDP是为了降低服务器的压力,至于TCP,QQ同样提供了支持。登录时可以选择是TCP还是UDP,默认为随机。登录请求发送给服务器后自动分配的。QQ在文件传输和媒体通讯过程中使用UDP降低了很大的服务器承载。我自己也做IM,早期的版本全跑TCP,用户承载没问题,但是当有文件传输时 服务器承载能力大打折扣,更关键的是多人视频,使用UDP点对点之后客户端内存增加了,CPU也增加了,但是服务器承载变强了。在使用TCP时 ,200人同时视频通话 服务器程序就吃掉970MB内存,2GB的服务器 只能承载200人就差不多极限,8GB内存 4核CPU的服务器也只能承载500-800人的视频通话,改成UDP之后差不多只占原来服务器资源的十五分之一。但是客户端内存消耗增加,使用服务器中转时,客户端9个视频,内存消耗大约90MB,UDP之后这个内存飙升到170MB。
引用 44 楼 xuddk727 的回复:
[quote=引用 40 楼 applemacosx 的回复:] 分析一下QQ你就会发现,QQ登录时会发送请求给服务器,QQ的服务器并不是一直监听客户端,反之是通过30秒的一个时间间隔来确定客户端是否还在,这个主要的以客户端完成,30秒以内客户端会和服务器握手,告诉服务器我还在,状态正常,而服务器会记录下这个时间,如果30后再次收到客户端握手则维护当前状态,如果收不到则表示客户端掉线了。然后服务器清除当前客户端的状态和注销用户。这就是为什么如果我们是退出QQ,对方很快就看到我们下线了,不超过五秒,但是如果我们的网络出现故障意外断线了,对方要看到你下线需要在大约30-40秒之后。所以使用UDP是为了降低服务器的压力,至于TCP,QQ同样提供了支持。登录时可以选择是TCP还是UDP,默认为随机。登录请求发送给服务器后自动分配的。QQ在文件传输和媒体通讯过程中使用UDP降低了很大的服务器承载。我自己也做IM,早期的版本全跑TCP,用户承载没问题,但是当有文件传输时 服务器承载能力大打折扣,更关键的是多人视频,使用UDP点对点之后客户端内存增加了,CPU也增加了,但是服务器承载变强了。在使用TCP时 ,200人同时视频通话 服务器程序就吃掉970MB内存,2GB的服务器 只能承载200人就差不多极限,8GB内存 4核CPU的服务器也只能承载500-800人的视频通话,改成UDP之后差不多只占原来服务器资源的十五分之一。但是客户端内存消耗增加,使用服务器中转时,客户端9个视频,内存消耗大约90MB,UDP之后这个内存飙升到170MB。
用这个数据算了下千万级别似乎不太对啊。[/quote] 服务器转发的都是文字信息,文件,视频都是点对点的
这不是鸭头 2014-03-24
  • 打赏
  • 举报
回复
引用 4 楼 chinatcp 的回复:
不是所有聊天记录都经过服务器的,否则腾讯早就挂机了,TCP长连接只不过记录通信双方的连接端口,点对点通信就用UDP了。减轻了服务器的大部分压力。
文字传输都是通过服务器转发。发送文件的时候是点对点打洞
赵4老师 2014-03-24
  • 打赏
  • 举报
回复
QQ的架构能用PC机的逻辑去思考吗?
hanyue03 2014-02-13
  • 打赏
  • 举报
回复
学习了!!!!!收藏
许文君 2014-02-13
  • 打赏
  • 举报
回复
引用 40 楼 applemacosx 的回复:
分析一下QQ你就会发现,QQ登录时会发送请求给服务器,QQ的服务器并不是一直监听客户端,反之是通过30秒的一个时间间隔来确定客户端是否还在,这个主要的以客户端完成,30秒以内客户端会和服务器握手,告诉服务器我还在,状态正常,而服务器会记录下这个时间,如果30后再次收到客户端握手则维护当前状态,如果收不到则表示客户端掉线了。然后服务器清除当前客户端的状态和注销用户。这就是为什么如果我们是退出QQ,对方很快就看到我们下线了,不超过五秒,但是如果我们的网络出现故障意外断线了,对方要看到你下线需要在大约30-40秒之后。所以使用UDP是为了降低服务器的压力,至于TCP,QQ同样提供了支持。登录时可以选择是TCP还是UDP,默认为随机。登录请求发送给服务器后自动分配的。QQ在文件传输和媒体通讯过程中使用UDP降低了很大的服务器承载。我自己也做IM,早期的版本全跑TCP,用户承载没问题,但是当有文件传输时 服务器承载能力大打折扣,更关键的是多人视频,使用UDP点对点之后客户端内存增加了,CPU也增加了,但是服务器承载变强了。在使用TCP时 ,200人同时视频通话 服务器程序就吃掉970MB内存,2GB的服务器 只能承载200人就差不多极限,8GB内存 4核CPU的服务器也只能承载500-800人的视频通话,改成UDP之后差不多只占原来服务器资源的十五分之一。但是客户端内存消耗增加,使用服务器中转时,客户端9个视频,内存消耗大约90MB,UDP之后这个内存飙升到170MB。
用这个数据算了下千万级别似乎不太对啊。
craboy1 2014-02-13
  • 打赏
  • 举报
回复
我是来收藏的!!!!
昭告天下 2014-02-13
  • 打赏
  • 举报
回复
都是大神,肖习了
翅膀又硬了 2014-01-15
  • 打赏
  • 举报
回复
引用 2 楼 lanbing598235681 的回复:
奇怪的一点,既然QQ登录后,服务器和客户端之间都会保留一个TCP长连接用于保持用户的在线状态,为什么数据中转不通过这条TCP链路中转呢,而非要用UDP协议来中转,还加上什么辅助算法来确保安全性(难道不需要占用额外的资源吗),理由说是,UDP较TCP快,服务器端只有采用UDP协议与客户端进行通讯才能保证这种超大规模的服务(TCP长连接不是在了吗,资源已经被占用了),有必要吗,真的是这样吗?
有没有必要不是凭空想出来的,是实践出来的
七重孤独 2014-01-14
  • 打赏
  • 举报
回复
分析一下QQ你就会发现,QQ登录时会发送请求给服务器,QQ的服务器并不是一直监听客户端,反之是通过30秒的一个时间间隔来确定客户端是否还在,这个主要的以客户端完成,30秒以内客户端会和服务器握手,告诉服务器我还在,状态正常,而服务器会记录下这个时间,如果30后再次收到客户端握手则维护当前状态,如果收不到则表示客户端掉线了。然后服务器清除当前客户端的状态和注销用户。这就是为什么如果我们是退出QQ,对方很快就看到我们下线了,不超过五秒,但是如果我们的网络出现故障意外断线了,对方要看到你下线需要在大约30-40秒之后。所以使用UDP是为了降低服务器的压力,至于TCP,QQ同样提供了支持。登录时可以选择是TCP还是UDP,默认为随机。登录请求发送给服务器后自动分配的。QQ在文件传输和媒体通讯过程中使用UDP降低了很大的服务器承载。我自己也做IM,早期的版本全跑TCP,用户承载没问题,但是当有文件传输时 服务器承载能力大打折扣,更关键的是多人视频,使用UDP点对点之后客户端内存增加了,CPU也增加了,但是服务器承载变强了。在使用TCP时 ,200人同时视频通话 服务器程序就吃掉970MB内存,2GB的服务器 只能承载200人就差不多极限,8GB内存 4核CPU的服务器也只能承载500-800人的视频通话,改成UDP之后差不多只占原来服务器资源的十五分之一。但是客户端内存消耗增加,使用服务器中转时,客户端9个视频,内存消耗大约90MB,UDP之后这个内存飙升到170MB。
halleyzhang3 2013-10-23
  • 打赏
  • 举报
回复
没研究过QQ的通讯。用UDP去做TCP就能做的事,有的是为了点对点穿越防火墙,有的是为了能带更多的客户端(Windows的Handle有数量限制,想要支持超过这个数量的用户就不能为每个用户建立长连接),至于IM,其实P2P还有潜在的好处,就是不用担心被Server端记录在案。
danscort2000 2013-10-23
  • 打赏
  • 举报
回复
引用 28 楼 china_jeffery 的回复:
同时在线几亿用户,全靠服务器这个也太疯狂了
这有什么疯狂的 一个指令频率并不高的协议 一台2*4核心服务器 带个几万用户还是很轻松的 几亿用户也就10000台服务器可以搞定了 TENCENT服务器[数据中心]早就超过这个规模了吧
rsdtt 2013-10-22
  • 打赏
  • 举报
回复
楼主打入腾讯内部,然后告诉我们真相吧
yifuzhiming 2013-10-22
  • 打赏
  • 举报
回复
引用 4 楼 chinatcp 的回复:
不是所有聊天记录都经过服务器的,否则腾讯早就挂机了,TCP长连接只不过记录通信双方的连接端口,点对点通信就用UDP了。减轻了服务器的大部分压力。
有见地
rickys2080 2013-10-22
  • 打赏
  • 举报
回复
不懂帮顶
erave5 2013-10-16
  • 打赏
  • 举报
回复
其中一点: UDP的回程有时间限制,一般路由设置为30秒; 就是说,在30秒后,如果这个UDP没有数据发送,对方就不能做数据推送了。 但TCP是长连接,一般路由不会把TCP超时。
asdjy123 2013-10-16
  • 打赏
  • 举报
回复
引用 27 楼 gw816 的回复:
[quote=引用 10 楼 applemacosx 的回复:] 做了几年的通讯软件,第一次看到这么搞笑的提问。
你有毛病啊?人家有问题来问你不懒得回答就算了出言不逊,有点涵养成不?[/quote] +1 一口气看下来,原来还有这么多道道,学习了
UDX协议 2013-10-16
  • 打赏
  • 举报
回复
引用 31 楼 u012133617 的回复:
引用
UDP来进行点对点通信
那UDP是面向非连接的,怎么能进行点对点通信呢?求解
从逻辑上来说,现在象QQ和其他IM软件都从逻辑上来说,都还是面向联接的。他们的UDP都是可靠UDP. 比如UDX协议。http://www.goodudx.com/web/index.php/site/download/6 这些都是利用可控的流控算法来进行可靠的数据传输,特别在实时性要求高,效率要求高的应用中。
天气不错呢 2013-10-07
  • 打赏
  • 举报
回复
引用
UDP来进行点对点通信
那UDP是面向非连接的,怎么能进行点对点通信呢?求解
加载更多回复(28)

18,356

社区成员

发帖
与我相关
我的任务
社区描述
VC/MFC 网络编程
c++c语言开发语言 技术论坛(原bbs)
社区管理员
  • 网络编程
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧