关于QQ使用协议的那点事

关于QQ使用的协议

事实上,QQ使用的协议包含了 UDP、TCP、HTTP这三种。

  • 登录: 客户端client采用 TCP协议 向服务器 server 发送信息,使用HTTP协议下载信息。登录之后,会有一个 TCP连接来保持这种在线状态。
  • 和好友发消息: 客户端client 采用 UDP 状态,但是需要通过服务器来转发。腾讯为了保证传输消息的可靠,一般采用上层协议来保证可靠传输。如果消息传输失败,客户端会提示消息发送失败,并可以重新发送。
  • 内网传输: 如果是两个处于内网的客户端进行传文件的时候,QQ是采用P2P技术进行传输,不需要进行服务器中转。

为什么QQ以 UDP为主,以TCP 为辅?

用 UDP的原因:

  • 节省创业成本 。UDP 比 TCP开销小P2P,不用使用服务器进行中转,大大节省中央服务器的开销。
  • 灵活。 TCP就是在 UDP基础上实现的一套用起来更简单的协议,用更底层的方式可以构建更高效更灵活并符合自己使用的协议。离开局域网后,UDP丢包概率大,收到包的次序 可能都是乱序的,包括对方可能还没有网络,这些都需要自己去维护,而TCP都是TCP协议帮程序员维护好的,只要一断线,就收到通知了。
  • UDP打洞 能更容易在不同品牌型号下的路由情况下实现P2P,无论是聊天文本,语音视频、文件收发都可以实现,对upnp等的支持,路由器都没有统一,但UDP打洞来实现P2P基本上都没有问题。

当发生网络抖动,网络极差时,TCP和UDP各自特点?

当网络极差、TCP的优势反而会成为劣势——
因为网络抖动的原因,应用层心跳超时(一般不依靠keepalive)应用层主动断掉socket之后TCP需要三次握手,才能够重新建立连接,一旦出现频繁的小抖动,就会使得带宽利用率降低。而等待四次挥手的时间,也会占用服务器上宝贵的资源。

UDP的优势是带宽的利用——
使用UDP对抗网络抖动,就是在应用层比TCP更快的探测和重传,一旦超过一定时间没有收到回复,客户端可以马上选择重试或者换一个IP:PORT重试(加入你的服务像QQ一样有多个接入),在服务端可果断的断掉的socket。

使用UDP实现一个面向连接的协议,这个协议可以很好的适应当前的网络环境和本身的业务。但凡事都有成本,成本就是你的应用层协议本身需要去实现抵抗网络异常带来的问题。例如乱序、例如业务数据的分片和重组,例如网络状态探测。

  • 3
    点赞
  • 4
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
【版权】 Author:NinJa911 Powered BY: www.ninja911.com Email: ninja911(爱特)qq.com 本贴转自: http://www.aau.cn/thread-4216-1-1.html 程序界面请到上面的贴子中查看 【简介】 快手W.QQ2012,采用腾讯QQ之w.qq.com协议(手机网页版)。 【目的】 1、第一次尝试Web UI开发应用 2、进阶学习快手 3、制作QQ机器人,应用于PHP或者直接数据库交互 【分享包】 1、快手项目包(aau、htm、js、css、picture) 2、Png源文件以及QQ素材 【开发用的工具有】 1、IDE:快手AAuto最新版 下载:www.aau.cn 2、网页设计:DreamWeaver CS5.5 + Jquery插件智能提示 3、图形UI设计:FireWorks CS5.5 4、快速编辑器:EditPlus3 5、调试Debug浏览器:FireFox8 + fireBug插件 6、应用图标设计:IconWorkshop 【准备与流程】 1、熟看快手范例 2、熟悉Javascript语言 3、熟悉Jquery框架 4、熟悉CSS层叠样式设计 5、参考腾讯官方QQ界面,构思UI 5、获取基本素材,通过QQ资源包获取 6、了解w.qq.com功能,分析网页js以及firebug进行抓包对比分析 【协议】 1、登陆协议: 由于腾讯所有WEB登陆应用,都是同一协议。我会在细化补充 2、w.qq.com协议看似比较简单,但也有难度。简单:利用官方的rpcservice.js文件能看懂逻辑交互类似(MVC里的M和C),views.js相当于V。复杂:数据相对复杂,没有json那样的美观,一句话简陋得不能再简陋(需要靠读rpcservice.js和dump结果分析)。 3、我下次会专门抽时间,把协议简单理一下,并画出w.qq.com中的js简单逻辑流程图 【备注】 1、源码开源!“自由”请理解好,请不要拿这个东西干坏,切忌切忌! 2、可以转载,可以二次开发,可以商用,反正“自由”。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值