第五部分 包拆解 2)org.directwebremoting.bayeux包
這個(gè)包是用來支持bayeux協(xié)議的,兼容comet技術(shù),什么是bayeux,請(qǐng)看如下:【
下面這些可以實(shí)現(xiàn)基于web的實(shí)時(shí)事件通知的方法:
1.HTTP流:這種方法由存在于不間斷的HTTP連接響應(yīng)中或某個(gè)XMLHttpRequest連接中的服務(wù)器數(shù)據(jù)流所組成。
2.HTTP拉取方式:在這種傳統(tǒng)的方法中,客戶端以用戶可定義的時(shí)間間隔去檢查服務(wù)器上的最新數(shù)據(jù)。這種拉取方式的頻率要足夠高才能保證很高的數(shù)據(jù)精確度,
但高頻率可能會(huì)導(dǎo)致多余的檢查,從而導(dǎo)致較高的網(wǎng)絡(luò)流量。而另一方面,低頻率則會(huì)導(dǎo)致錯(cuò)過更新的數(shù)據(jù)。理想地,拉取的時(shí)間間隔應(yīng)該等于服務(wù)器狀態(tài)改變的速度。
3.反轉(zhuǎn)AJAX:服務(wù)流應(yīng)用到AJAX,就是所謂的反轉(zhuǎn)AJAX 或者COMET 。它使得服務(wù)器在某事件發(fā)生時(shí)可以發(fā)送消息給客戶端,而不需要客戶端顯式的請(qǐng)求。
目標(biāo)在于達(dá)到狀態(tài)變化的實(shí)時(shí)更新。COMET使用了HTTP/1.1中的持續(xù)連接的特性。通過HTTP/1.1,除非另作說明,服務(wù)器和瀏覽器之間的TCP連接會(huì)一直保持連接狀態(tài),
直到其中一方發(fā)送了一條明顯的“關(guān)閉連接”的消息,或者有超時(shí)以及網(wǎng)絡(luò)錯(cuò)誤發(fā)生。
4.長(zhǎng)時(shí)間輪詢:也就是所謂的異步輪詢,這種方式是純服務(wù)器端推送方式和客戶端拉取方式的混合。它是基于BAYEUX協(xié)議的。這個(gè)協(xié)議遵循基于主題的發(fā)布——訂閱機(jī)制。
在訂閱了某個(gè)頻道后,客戶端和服務(wù)器間的連接會(huì)保持打開狀態(tài),并保持一段事先定義好的時(shí)間。如果服務(wù)器端沒有事件發(fā)生,而發(fā)生了超時(shí),
服務(wù)器端就會(huì)請(qǐng)求客戶端進(jìn)行異步重新連接。如果有事件發(fā)生,服務(wù)器端會(huì)發(fā)送數(shù)據(jù)到客戶端,然后客戶端重新連接
注:Comet:基于 HTTP 長(zhǎng)連接的“服務(wù)器推”技術(shù)
】
Bayeux是Dojo基金會(huì)定義的一個(gè)協(xié)議。dwr在去年的時(shí)候就開始支持該協(xié)議,隨著dwr項(xiàng)目2008年初加入到Dojo基金會(huì),ajax技術(shù)(dwr)和comet(cometd)技術(shù)將會(huì)融合的更加緊密(說明:dwr,cometd現(xiàn)在都屬于dojo基金會(huì)下面的項(xiàng)目),本包將來估計(jì)會(huì)作很大的變化。ajax技術(shù)和comet技術(shù)的融合,參看使用 Jetty 和 Direct Web Remoting 編寫可擴(kuò)展的 Comet 應(yīng)用程序,
這個(gè)包是dwr外部支持包,并未被其他包引用。
org.directwebremoting.bayeux.BayeuxClient Bayeux協(xié)議客戶端
org.directwebremoting.bayeux.BayeuxScriptConduit Bayeux協(xié)議Script管道
org.directwebremoting.bayeux.BayeuxServletContextAttributeListener 該監(jiān)聽器由web.xml注冊(cè),如果要使用推的技術(shù),那么你就必須注冊(cè),BayeuxServletContextAttributeListener,會(huì)調(diào)用BayeuxClient,按comet原理將script推送的客戶端。具體細(xì)節(jié)未作研究。
posted on 2008-03-29 02:27 滿店香 閱讀(688) 評(píng)論(0) 編輯 收藏 所屬分類: dwr源碼分析