日期:2014-05-16  浏览次数:20830 次

webqq的实现原理??帮忙解答一下
webqq如果用的纯http协议的话,客户端需要频繁主动询问服务器才能及时更新(包括ajax之类的局部更新),并且消息发送也有延时。但是实际上webqq一点延时也没有,并且实际上它的消息还是用icq(udp)协议发送的,浏览器能即时把这个消息显示出来。
那么:
标准浏览器是怎么支持发送接受udp消息并即时显示出来的??浏览器有这个功能吗比如javascript有这种函数之类的?









------解决方案--------------------
基于浏览器的HTTP本身是没有这种功能的,你说的这种通常都是通过comet模式来模拟服务器推送数据,其实是有延时的,一种就是ajax轮训,一种就是gmail里面那种在闲聊天方式使用一个接受长输出流的隐藏iframe来模拟。
都和传输层协议没有直接关系的,除非自己开发ActiveX控件,这是另外一个路线。
------解决方案--------------------
你抓包就能看到,

http://web-proxy.qq.com/s_conn

你请求,他有延迟的,如果有新信息过来,就可以通过这个管道直接来

如果很长时间没有新信息,那么这个管道会关闭,然后客户端再开一个,也能起到你说的快速反应的效果
------解决方案--------------------
应该就是轮询,下面这个就是异步请求,从地址分析来看应该是XML_RPC方式。具体不清楚,这个即使聊天就是通过这个轮询来实现的。ajax的
用firebug就能发现整个页面都是ajax

响应头信息
Content-Type

text/html; charset=utf-8

Cache-Control

private

Server

TENCENT_HTTP_Server

Content-Length

31

请求头信息
Host

web-proxy.qq.com

User-Agent

Mozilla/5.0 (Windows; U; Windows NT 5.1; zh-CN; rv:1.9.0.6) Gecko/2009011913 Firefox/3.0.6

Accept

text/html,application/xhtml+xml,application/xml;q=0.9,*/*;q=0.8

Accept-Language

zh-cn,zh;q=0.5

Accept-Encoding

gzip,deflate

Accept-Charset

gb2312,utf-8;q=0.7,*;q=0.7

Keep-Alive

300

Connection

keep-alive

X-Requested-From

webqq_client

Content-Type

application/x-www-form-urlencoded; charset=UTF-8

Referer

http://web-proxy.qq.com/

Content-Length

25

Cookie

pvid=9664264059; flv=10.0 r22; r_cookie=94128866802; pt2gguin=o0018114440; ptcz=c2ce28273af9017313680939155cad7b8fc3528a2057e3815a79025f2e5f8045
; webqq_setting=1879048192; pgv=ssid=s5212829345; verifysession=27f0346bf5b9474edc4eae57fd21a5ee5e5c23c9481445d30e6fbd452538ab18c933891ff95da40c
; uin=o0018114440; skey=@oTvCD5D12; qqmail_sid=3835fb2bf50fe2bc833052704d7741e4; qqmail_username=18114440
; qqmail_domain=http://m157.mail.qq.com
------解决方案--------------------
欢迎大家去 一个web msn 的网页

http://www.msn2web.com


你们说的问题其实是这样的, 所谓的comet模式关键在于服务器端而不是客户端,客户端可以简单轮训,但是 comet 模式可以避免轮训快速结束,这样可以非常高的提高效率, 问题是 comet 模式和传统的http 服务器的设计思想是不一样的,所以现在的服务器都不支持这种模式,都是代码来实现的,效率并不好