BlazeDS中channel和Endpoint的相關(guān)概念

          1.Channel和Endpoint的定義
          Channels are client-side objects that encapsulate the connection behavior between Flex components and the BlazeDS server. Channels communicate with corresponding endpoints on the BlazeDS server. You configure the properties of a channel and its corresponding endpoint in the services-config.xml file.

          2.從數(shù)據(jù)格式上分,Channels分為AMF Channel和HTTP Channel,區(qū)別在于
          The difference between AMF and HTTP channels is that AMF channels transport data in the binary AMF format and HTTP channels transport data in AMFX, the text-based XML representation of AMF.

          3.從客戶端與服務(wù)端的交互方式上分,Channels主要分為:
            Simple channels and endpoints 包括:
             (1) Non-polling channels
             (2) Polling channels
             (3) Long polling channels
           
            Streaming channels
             (1) Streaming channels

          3.關(guān)于 Non-polling,Polling,Long polling和steaming的一些解釋
          http://www.qgy18.com/2008/08/webim-design-transport/
          http://newteevee.com/2009/10/04/adobe-to-finally-support-http-streaming/

          1.短輪詢(polling):核心思想是客戶端定時(shí)去服務(wù)器取消息。為了實(shí)現(xiàn)即時(shí)效果,輪詢的間隔必須設(shè)計(jì)得足夠短,另外為了操作的流暢,需要使用Ajax來發(fā)送請(qǐng)求。本人的QGYWebIM就是采用的此方案。這種方案的優(yōu)點(diǎn)是:后端程序編寫比較容易,發(fā)送完響應(yīng)信息馬上斷開連接,不會(huì)占用太多服務(wù)器資源。缺點(diǎn)是一般情況下,頻繁的請(qǐng)求中有大半是無用,這些冗余請(qǐng)求無形中浪費(fèi)了帶寬和服務(wù)器資源。我們可以通過判斷用戶的活躍程度來決策請(qǐng)求服務(wù)器的間隔,我在51的一個(gè)帖子提到過這種方法,但是間隔一旦長了,消息的傳送就有延時(shí),違背了即時(shí)聊天的初衷了。

          2.長輪詢(long-polling):基本原理是客戶端向服務(wù)器發(fā)送請(qǐng)求,服務(wù)器接到請(qǐng)求后hold住連接,直到有新消息才返回響應(yīng)信息并關(guān)閉連接,連接被斷開期間用戶的新信息會(huì)被服務(wù)器緩存起來。客戶端處理完響應(yīng)信息后再向服務(wù)器發(fā)送新的請(qǐng)求。這種做法的優(yōu)勢(shì)是如果用戶一直沒新消息,客戶端不會(huì)頻繁的輪詢?nèi)シ?wù)器取消息,節(jié)省了流量,但是服務(wù)器維持長連接是很消耗資源的。具體實(shí)現(xiàn)起來,前端這邊基本不需要什么改動(dòng),依然是用Ajax輪詢?nèi)⌒畔?,后端需要在沒有新消息時(shí)處理一下。

          3.長連接(streaming):其實(shí)很早以前就有人使用這種技術(shù)來實(shí)現(xiàn)聊天室的通訊,HTTP1.1開始支持。以前在頁面中嵌入一個(gè)iframe,iframe里放一個(gè)使用長連接頁面,服務(wù)器有新消息就會(huì)及時(shí)的在iframe里反映出來,再依靠客戶端的腳本解析出來就OK了。這樣做一個(gè)比較嚴(yán)重的問題是:使用 iframe請(qǐng)求長連接時(shí),無論是IE還是firefox都會(huì)認(rèn)為頁面沒有加載完而顯示進(jìn)度條,很難看。不過這個(gè)問題是可以解決的。firefox支持了Streaming Ajax,在readyState為3的時(shí)候就能接受數(shù)據(jù),所以問題不大;IE則只能在readyState為4,即連接斷開時(shí)才能得到返回值。但是偉大的Google工程師使用了一個(gè)hack成功的解決了這個(gè)問題:使用一個(gè)被稱為“htmlfile”的ActiveX,把iframe放在這個(gè)ActiveX里就OK了。

          無疑,使用長連接對(duì)于用戶來說是最好的方案,用戶體驗(yàn)最好(消息能及時(shí)的到達(dá))、占用用戶帶寬最少(不會(huì)發(fā)送無用的請(qǐng)求),但是會(huì)增加服務(wù)器的開銷;長輪詢是折中方案,F(xiàn)acebook IM 就是采用這種方案,不過做了一點(diǎn)改動(dòng):客戶端發(fā)起的每個(gè)連接服務(wù)器都hold10S,這10S中新消息會(huì)源源不斷的返回給客戶端,10s后連接關(guān)閉,客戶端發(fā)起下一個(gè)連接。這樣做是因?yàn)镕acebook的用戶會(huì)不斷的打開、關(guān)閉新頁面,如果每個(gè)頁面都建立一個(gè)永久的長連接,會(huì)阻塞瀏覽器其他請(qǐng)求,服務(wù)器也會(huì)吃不消的;短輪詢因?yàn)閷?shí)現(xiàn)起來簡單,適用于小型應(yīng)用。

          posted on 2010-03-01 17:16 想飛就飛 閱讀(1043) 評(píng)論(0)  編輯  收藏 所屬分類: Flex

          公告


          導(dǎo)航

          <2010年3月>
          28123456
          78910111213
          14151617181920
          21222324252627
          28293031123
          45678910

          統(tǒng)計(jì)

          常用鏈接

          留言簿(13)

          我參與的團(tuán)隊(duì)

          隨筆分類(69)

          隨筆檔案(68)

          最新隨筆

          搜索

          積分與排名

          最新評(píng)論

          閱讀排行榜

          評(píng)論排行榜

          主站蜘蛛池模板: 合肥市| 孝感市| 彰武县| 雅安市| 孟津县| 福贡县| 宿州市| 确山县| 萨嘎县| 汉阴县| 河北省| 新闻| 汝州市| 遵义市| 靖安县| 分宜县| 涡阳县| 星座| 广河县| 玉溪市| 自治县| 临湘市| 漾濞| 怀远县| 琼结县| 新民市| 丰顺县| 高邑县| 临猗县| 化州市| 澄江县| 偏关县| 平定县| 团风县| 宜章县| 广水市| 桐柏县| 竹溪县| 治县。| 潢川县| 阜宁县|