首页 诗词 字典 板报 句子 名言 友答 励志 学校 网站地图
当前位置: 首页 > 教程频道 > 网站开发 > Web前端 >

新浪微博Web版中的私信聊天效能的几个技术细节

2013-02-25 
新浪微博Web版中的私信聊天功能的几个技术细节新浪微博Web版中的私信聊天功能的几个技术细节蒋彪@南京1.Pu

新浪微博Web版中的私信聊天功能的几个技术细节

                                                                                        新浪微博Web版中的私信聊天功能的几个技术细节

蒋彪@南京

1.    Pull而不是push

一般在网页上要取得实时聊天数据,无外乎两种技术实现

a.      用ajax定时发起轮训, 主动的pull服务器端数据

b.     基于Flash,ActiveX,Html5等富客户端技术, 和server建立长连接,server端实时的push到客户端

新浪的实现是长轮训, 观察它的http请求,每隔一段时间网页就会发起如下的一个GET request(时间间隔不是固定的,怀疑server端做了指数推移)

(基于iframe的流pull?)

http://4.136.web0.im.weibo.com/im?jsonp=parent.org.cometd.script._callback313&message=%5B%7B%22channel%22%3A%22%2Fmeta%2Fconnect%22%2C%22connectionType%22%3A%22callback-polling%22%2C%22id%22%3A271%2C%22clientId%22%3A%22gt2psmdubshz54tl6j%22%7D%5D&1361434136747

将参数unescape之后,这个url就是

http://4.136.web0.im.weibo.com/im?jsonp=parent.org.cometd.script._callback313&message=[{"channel":"/meta/connect","connectionType":"callback-polling","id":271,"clientId":"gt2psmdubshz54tl6j"}]&1361434136747

 

请求的头文件Connection设置为keep-alive,使用http1.1中的长连接,并且服务器端在没有新消息的情况下不返回response,造成事实上的长连接。

      如果server端没有收到任何新消息,时间到之后,返回如下response

<iframe id="cometd_uc" style="position: absolute; left: -100px; top: -100px; height: 1px; width: 1px; visibility: hidden; display: none;"> <html> <head><script type="text/javascript" src="http://1.126.web0.im.weibo.com/im?jsonp=parent.org.cometd.script._callback16&message=%5B%7B%22channel%22%3A%22%2Fmeta%2Fconnect%22%2C%22connectionType%22%3A%22callback-polling%22%2C%22id%22%3A18%2C%22clientId%22%3A%223y0wflmlof3hccq3u5%22%7D%5D&1361512732973" charset="utf-8">try{parent.org.cometd.script._callback16([{"id":"18","successful":true,"channel":"/meta/connect"}])}catch (ex) {} </script></head><body></body></html></iframe>

可惜的是,尝试用各种各样的XSS想拿到这个dom元素都失败了。微博在所有的输入框中都做了encode。不知道有哪位大神能发现一个可以入侵的窗口。

 

版本归蒋彪所有, 转载请注明出自《南湖边上的小木屋》

#以上#



1楼guangboo昨天 14:53
应该是使用了类似BOSH的传输协议,可以在WEB上模拟TCP连接。只是服务器端要做一些处理,在连接超时前如果没有状态更新就不返回(response),否则返回空等信息。客户端收到返回再重新发送请求,这样就实现了类似于TCP的常连接效果。
Re: nanjingjiangbiao昨天 15:00
回复guangboon原来如此,受教受教。用长轮训模拟长连接,原来这个技术名叫BOSH。我孤陋寡闻了

热点排行