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 服务器的设计思想是不一样的,所以现在的服务器都不支持这种模式,都是代码来实现的,效率并不好