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

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

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

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

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

          公告


          導(dǎo)航

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

          統(tǒng)計

          常用鏈接

          留言簿(13)

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

          隨筆分類(69)

          隨筆檔案(68)

          最新隨筆

          搜索

          積分與排名

          最新評論

          閱讀排行榜

          評論排行榜

          主站蜘蛛池模板: 当雄县| 九江县| 汝城县| 莱西市| 全南县| 黄龙县| 界首市| 凤阳县| 南召县| 西宁市| 塔城市| 唐山市| 青冈县| 新化县| 和硕县| 阿拉善盟| 苏尼特右旗| 沭阳县| 依兰县| 瑞安市| 吴江市| 南皮县| 明星| 阳春市| 镶黄旗| 崇信县| 榕江县| 凌海市| 乌恰县| 龙岩市| 临夏县| 淮北市| 周至县| 乌兰浩特市| 平利县| 泽库县| 北辰区| 石景山区| 乾安县| 蒲江县| 道孚县|