腾讯WebQQ聊天架构分析1

有言在先:WebQQ页面的代码量很大,限于精力只能分析局部,限于水平可能分析有误,有兴趣者可以一起讨论,共同学习!

一、WebQQ的客户端技术

1. 跨域的长轮询ajax

WebQQ使用长轮询ajax来接收即时信息。

跨域的实现是在主页面中嵌入隐藏的iframe帧,并在该iframe文件中的head中嵌入ajax/js代码,实现通讯调用,对于iframe中ajax因为完全同源也就不存在跨域问题,而iframe和主页只是跨子域,使用脚本document.domain = 'qq.com'即可解决。

 

iframe中的ajax使用了Yahoo的YUI库(YUI.Connect/http://developer.yahoo.com/yui/docs/connection.js.html)并稍加修改,代码进行了压缩,并进行了变量名替换!

 

点评:如果在主页中直接使用ajax虽然没有了跨域问题,但是聊天服务器要做稍微复杂一些的负载平衡而且效果也未必好;而使用嵌入的iframe,负载平衡就简单很多,例如:http://web-proxy14.qq.com (其中的14应该是服务器的编号),在线人数增多,直接添加服务器就可以。另一个优点就是避免了浏览器连接数的限制。

你可能感兴趣的:(腾讯WebQQ聊天架构分析1)