原文地址: http:///documentation/2.x/cometd-java/concepts
CometD 2 Java 概念 由 sbordet 提交于星期日,2010/10/10-20:50。 CometD 2 Java 概念 CometD 項目實現(xiàn)的是comet技術,這技術使用的是 Bayeux 協(xié)議提供可擴展的基于 HTTP 的消息系統(tǒng)。 一般情況下,消息系統(tǒng)由服務器部分的客戶端部分組成,它們通過協(xié)議進行通信。這捕獲模式稱為半對象加(half object plus)協(xié)議。如圖: ![]() Sessions Org.cometd.bayeux.client.ClientSession
是客戶端部分的半對象,它表示與 Bayeux 服務器通信的一個Session。 當一個客戶端半對象session被客戶端創(chuàng)建時,他們最初沒有分配給記錄者的org.cometd.bayeux.server.ServerSession半對象。 只有當客戶端的session服務器與握手時,他的服務器session記錄被創(chuàng)建,且兩個半對象之間的連接被創(chuàng)建。 客戶端session的概念對于遠程客戶端來說是易懂的,但是它也存在于服務端部分。 Bayeux 服務端只能識別服務端session半對象,且只有一種方法去創(chuàng)建服務端session半對象,就是首先創(chuàng)建它的記錄客戶端,然后用它去與服務端握手。 出于這個原因,在服務端部分,就有了org.cometd.bayeux.server.LocalSession這個額外的概念,它擴展于org.cometd.bayeux.client.ClientSession。它是一個發(fā)生在服務端的客戶端session,且從此本地化到服務端。 例如服務端服務被分配給一個本地的session,在創(chuàng)建服務端服務之后,這個本地的session握手的同時創(chuàng)建記錄的服務端session半對象。所以bayeux 服務端可以通過org.cometd.bayeux.server.ServerSession用同一種方法處理遠程session和本地session 。 在CometD實現(xiàn)中,兩端的通信用的是bayeux消息交換數(shù)據(jù)。 消息 在客戶端Java API提供org.cometd.bayeux.Message接口去和只讀內(nèi)容的消息進行交互。 用戶可以編寫代碼改變一個消息的內(nèi)容,用的是把 內(nèi)部子接口org.cometd.bayeux.Message.Mutable作為參數(shù)傳遞給回調(diào)函數(shù)(例如:擴展客戶端)。 在服務端的子接口org.cometd.bayeux.server.ServerMessage允許和只讀消息交互,并把內(nèi)部子接口org.cometd.bayeux.server.ServerMessage.Mutable作為參數(shù)傳遞給回調(diào)函數(shù),在這個函數(shù)中用戶可以編寫代碼改變一個消息的內(nèi)容(例如:擴展服務端)。 消息被發(fā)布到頻道中去。 頻道 一個頻道被定義成一個主題,這個主題是關于發(fā)布到這個頻道的消息和喜歡把接收到的消息發(fā)布到這個頻道的訂閱者的。 頻道可以寫成類似于目錄路徑或通配符,例如: /chat/room/1,
/stocks/**, /cinema/trailers/*. Bayeux頻道被分為三種類別: ?元數(shù)據(jù)頻道(以/meta/開頭且被bayeux協(xié)議保留) ?服務頻道(以/services/開頭并被用于客戶端到服務端的通信) ?普通頻道(以任何字符串開頭并被用于客戶端之間廣播消息) 在服務端,子接口org.cometd.bayeux.server.ServerChannel允許與頻道交互(例如:用于發(fā)布消息或增加偵聽器) 在客戶端,被通過org.cometd.bayeux.client.ClientSessionChannel提供的客戶端session限制. |
|
來自: phoneone > 《CometD 2.x》