首先webqq没是使用flash作为长连接代理。
其使用了yahoo的ajax工具包。使用中,20秒进行一次http://web-proxy.qq.com/conn_s POST请求,内容为:HTTP/1.1 200 Ok
Content-Type: text/html; charset=UTF-8
Cache-Control: private
Server: QQ/J.vn
Content-Length: 020秒一次,并且内容为空,的POST,这个应该是判断用户离线使用的。而并非取得任何新数据。比较奇怪的,任何一个用户发信息给正在使用WEBQQ的用户,立刻WEBQQ用户会自己,主动的发起一次对 http://web-proxy.qq.com/conn_s POST请求
来获得新的聊天内容数据,内容如下:HTTP/1.1 200 OK
Content-Type: text/html; charset=utf-8
Cache-Control: private
Server: TENCENT_HTTP_Server
Content-Length: 681034456174;17;3088;313033262;275062;09;0b;test123;1241812821;575540857;
聊天内容是test123,可以看到并未进行加密之类,不过这不再本文讨论范围,
我想知道的是,WEB QQ是如何即时的获得有信息到来的这个“通知”让客户端主动的去发起请求去服务器获取数据?我过了一遍代码,绝不是简单的轮询之类,因为没有任何延迟,如果是轮询总会有延迟。而且看链接状态也没有显式的长连接。他页面上有4个iframe<iframe id="conn_frame1" name="conn_frame1" src="http://web-proxy.qq.com" style="display:none;"></iframe>
<iframe id="conn_frame2" name="conn_frame2" src="http://web-proxy2.qq.com" style="display:none;"></iframe>
<iframe id="chatlog" name="chatlog" src="" style="display:none;"></iframe>
<iframe id="filelog" name="filelog" src="" style="display:none;"></iframe>应该是以某个iframe以某种方法与服务器保持连接,这是如何实现的?
如何“通知”让客户端主动的去发起请求去服务器获取数据?请到web.qq.com看一下实现后进行讨论~
其使用了yahoo的ajax工具包。使用中,20秒进行一次http://web-proxy.qq.com/conn_s POST请求,内容为:HTTP/1.1 200 Ok
Content-Type: text/html; charset=UTF-8
Cache-Control: private
Server: QQ/J.vn
Content-Length: 020秒一次,并且内容为空,的POST,这个应该是判断用户离线使用的。而并非取得任何新数据。比较奇怪的,任何一个用户发信息给正在使用WEBQQ的用户,立刻WEBQQ用户会自己,主动的发起一次对 http://web-proxy.qq.com/conn_s POST请求
来获得新的聊天内容数据,内容如下:HTTP/1.1 200 OK
Content-Type: text/html; charset=utf-8
Cache-Control: private
Server: TENCENT_HTTP_Server
Content-Length: 681034456174;17;3088;313033262;275062;09;0b;test123;1241812821;575540857;
聊天内容是test123,可以看到并未进行加密之类,不过这不再本文讨论范围,
我想知道的是,WEB QQ是如何即时的获得有信息到来的这个“通知”让客户端主动的去发起请求去服务器获取数据?我过了一遍代码,绝不是简单的轮询之类,因为没有任何延迟,如果是轮询总会有延迟。而且看链接状态也没有显式的长连接。他页面上有4个iframe<iframe id="conn_frame1" name="conn_frame1" src="http://web-proxy.qq.com" style="display:none;"></iframe>
<iframe id="conn_frame2" name="conn_frame2" src="http://web-proxy2.qq.com" style="display:none;"></iframe>
<iframe id="chatlog" name="chatlog" src="" style="display:none;"></iframe>
<iframe id="filelog" name="filelog" src="" style="display:none;"></iframe>应该是以某个iframe以某种方法与服务器保持连接,这是如何实现的?
如何“通知”让客户端主动的去发起请求去服务器获取数据?请到web.qq.com看一下实现后进行讨论~
解决方案 »
- 砖家勿进,只求民间高手一枚~~如何让48w+次循环更舒心
- 谁能告诉我这是怎么回事
- JSP动态改变下拉列表框(select)中下拉列的最大值
- fckeditor 编辑器在.net创建的网站的页面上浏览时总是说不到页面,但同样的代码在web应用程序的网站上就可以??
- JavaScript学习方法
- 输入检查 对输入的字符串格式进行判断
- ()()匿名函数的写法中后面括号里面的参数如何理解
- 【100分】【求助】document.writeln("")中怎么输出一段"<script>...</script>"
- 怎样不显示标题栏?
- 暂停?给点思路?
- 自动生成编号
- 我想用JS写一个获取某个节点的父节点id的程序。但代码中的红色部分,即输入的参数不对,应该怎样把a标签的id参数传进去,然后获得其父节点div的id呢?
当用户有新状态,立马跳出循环.
2.2 如果不是跳出的循环. 设置用户无新状态.3 输出用户状态.就是这样的一个设计.
“我想知道的是,WEB QQ是如何即时的获得有信息到来的这个“通知”让客户端主动的去发起请求去服务器获取数据?” 使用服务器推送技术, 可以再有数据到来的时候将数据推送到客户端, 你可以参考一下我前段时间的帖子, 看下里面的回复, 已经概述了基本上所有的 WEB 模 式下实现消息的及时传输。 路径:http://topic.csdn.net/u/20090504/15/1b34df3f-3d28-4832-9e5d-6d351e322321.html
TENCENT_HTTP_Server 这个Server应该异步IO实现的,这个可以用c++,java等语言实现server。
然后再在这个Server上加上一层Http协议。
这里要提到的是关于Comet技术,就是服务器推,利用NIO这样就不用建立一个长连接就消耗一个线程。让服务器承认过大的压力。
关于Frame,确实是用来接收数据用的。里面还有一个技巧就是用Frame处于长连接接收数据,会让IE进度条显示正在接受数据,Google的人员解决了这个问题。
在此之前 b并没有发送任何请求 服务器是怎么做到给b做响应 时时刷新是不是太浪费服务器资源