首先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看一下实现后进行讨论~

解决方案 »

  1.   

    1 服务端发起  ajax 请求.2.1 服务器,循环. 查询用户是否有新状态.在循环体中sleep(0.5)秒. 然后循环 40次左右.
         当用户有新状态,立马跳出循环.
    2.2 如果不是跳出的循环. 设置用户无新状态.3 输出用户状态.就是这样的一个设计.
      

  2.   

      
      “我想知道的是,WEB QQ是如何即时的获得有信息到来的这个“通知”让客户端主动的去发起请求去服务器获取数据?”  使用服务器推送技术, 可以再有数据到来的时候将数据推送到客户端, 你可以参考一下我前段时间的帖子, 看下里面的回复, 已经概述了基本上所有的 WEB 模  式下实现消息的及时传输。  路径:http://topic.csdn.net/u/20090504/15/1b34df3f-3d28-4832-9e5d-6d351e322321.html
      

  3.   

    个人猜想
    TENCENT_HTTP_Server 这个Server应该异步IO实现的,这个可以用c++,java等语言实现server。
    然后再在这个Server上加上一层Http协议。
    这里要提到的是关于Comet技术,就是服务器推,利用NIO这样就不用建立一个长连接就消耗一个线程。让服务器承认过大的压力。
    关于Frame,确实是用来接收数据用的。里面还有一个技巧就是用Frame处于长连接接收数据,会让IE进度条显示正在接受数据,Google的人员解决了这个问题。
      

  4.   

    我最近在弄一个用QQ接口来实现的C#程序,请问各位大哥有关于这个接口的代码没有
      

  5.   

    受益,请问一下,ajax请求的代码是写在哪一个脚本文件里面的?
      

  6.   

    [size=10px][/size]asdasd
      

  7.   

    不懂,那qq.com是什么类型的web服务器呢??
      

  8.   

    我觉得,webQQ的实现方式和JSONRPC有点像,只是WebQQ的JS客户端自从用户登录就一直和服务器连接着,由于他这样一直连接着,所以性能不是很好,所以可能你们都感觉到WebQQ其实并不是很好用。
      

  9.   

    这是反向ajax技术,我可以实现像聊天室的那种广播方式,但是用户对用户的单线链接方式不知道怎么实现。
      

  10.   

    回复这么多,but貌似还是没结论
      

  11.   

    web 不都是基于请求和相应的吗 假设有a给b发送数据 即a先发请求到服务器 服务器发给b
    在此之前 b并没有发送任何请求 服务器是怎么做到给b做响应 时时刷新是不是太浪费服务器资源