[微程式-技術研討會] 8月研討會 - Bidirectional-streams Over Synchronous HTTP (BOSH) - 主講人:znul

Bidirectional-streams Over Synchronous HTTP (BOSH)

網址: http://www.xmpp.org/extensions/xep-0124.html

一何謂bosh?
雙向性的Http串流,利用http protocol post transport xmpp stream

二why http protocol?
一般防火牆都會允許tcp 80 prot 的對外窗口,某些少數的防火牆甚至允許任何的通訊協定通過這個port,
但是更多的proxy,filter 會確認通過的串流是否為http

三技術名詞
1pull: client use http request from server,是一種以網路為基礎的溝通方法
2 push: server response data to client,是一種以網路為基礎的溝通方法,server主動將資料傳給client

四compare other bidirectional http-base transport protocol
1http polling :週期性的詢問server是否有資料
2 ajax(Asynchronous JavaScript and XML)
3 comet :是長時間連線要求的web 應用的模式,server在有資料要傳送時透過此連線push資料至用戶端.
利用ajax with long polling or iframe or htmlfile activex 的技術去探測server是否有新的訊息
4bosh:採用多個http request / response 對,非polling,自稱可高效率低延遲的傳輸訊息及節省網路頻寬

五要求
1相容於受約束的執行環境(如行動電話或流覽器的用戶端)**.
2可以讓流覽器的用戶端建立跨網域的連接*
3相容部份緩衝的http代理回應*
4有效率的通過http回應時間限制的代理*
5完全相容http 1.0*
6相容受限的網路連線(如防火牆.代理.閘道)
7容錯性
8擴展性
9使用的頻寬遠低於輪詢機制的protocols
10回應的時間遠低於輪詢機制的protocols
11支援輪詢
12按順序傳送資料
13防止未經許可的使用者插入http request
14防止拒絕服務攻擊15多工的資料串流
*為comet無法做到的

六架構 Server [unwrapped data streams] Connection Manager (specialized HTTP server) BOSH [HTTP + <body/> wrapper] HTTP Client

六bosh原理(connection manager以下稱cm)
Client 傳送一個http請求,cm並不馬上回應,直到有資料要傳回cleint端,client端收到回應後,馬上又發送另一個
http請求,以確保cm隨時保持一個請求的連線,使之能push資料給client
在cm hold請求的同時,client端又有資料要傳送,此時需要發起第二個http請求,傳送資料,但一般的http client
並不支援管線(在同個連線發起多個請求),所以必須建立第二個http 連線發起第二個請求,此時cm不管是否
有無資料必須回應第一個http請求給client端,cm這麼做可確保client端有資料需傳送時可隨時發起第二個
請求(client不能同時開啟兩個以上的 http連線,不然就是要等cm回應第一個請求)
在網路環境良好的情況下,client可使用http 1.1,所有的請求是透過兩個持續的http連線,當cm從其中一個
連線Push資料時,client端也可透過另一個連線push資料(所以回應速度會跟一般的TCP連線差不多),要注意
的是,這兩個連線的角色,client每傳送一資料,就互換一次
若雙方在特定的時間內都沒有資料傳輸,那麼 cm傳回一個空值的回應,此時將觸發client發起另一個新的
請求,Cm藉此判斷在特定時間內連線是否中斷,這種交流就像"keep-alive" or "ping"等方法的實踐,因為BOSH
不涉及Polling,所以頻寬的消耗不會大於一般的TCP連線
在通常的情況下,數据可立即推送,不過,若其中一個端點剛推送了資料,那麼必須等待一個網路往返的時間
才可再次推送資料,若client端支援管線,那麼多個連線並行是可行的,因此client可隨時傳送資料,也可確保cm
隨時hold足夠的請求,若cm的請求連線集區夠大的話,client也不用對返回的空值回應,立即發送一個空的請求,
而是等到有資料時再發送請求,因此若client與流量是均衡的話,就像是使用一個標準的TCP連線
Cm的每個資料推送,都是一個標準的http response,因此不像commet技術,bosh可以2,3,4,5


九.參考文件
<a href="http://www.xmpp.org/extensions/xep-0124.html">http://www.xmpp.org/extensions/xep-0124.html</a>
<a href="http://www.xmpp.org/extensions/xep-0025.html">http://www.xmpp.org/extensions/xep-0025.html</a>
<a href="http://en.wikipedia.org/wiki/Comet_(programming)">http://en.wikipedia.org/wiki/Comet_(programming)</a>
<a href="http://www.ibm.com/developerworks/cn/web/wa-lo-comet/">http://www.ibm.com/developerworks/cn/web/wa-lo-comet/</a>
張貼留言