Pushlet之消息通知- 實現服務器端推送技術

Pushlet 是一個開源的 Comet 框架,在設計上有很多值得借鑑的地方,對於開發輕量級的 Comet 應用很有參考價值。
觀察者模型
Pushlet 使用了觀察者模型:客戶端發送請求,訂閱感興趣的事件;服務器端爲每個客戶端分配一個會話 ID 作爲標記,事件源會把新產生的事件以多播的方式發送到訂閱者的事件隊列裏。
客戶端 JavaScript 庫
pushlet 提供了基於 AJAX 的 javascript 庫文件用於實現長輪詢方式的“服務器推”;還提供了基於 iframe 的 JavaScript 庫文件用於實現流方式的“服務器推”。
JavaScript 庫做了很多封裝工作:
定義客戶端的通信狀態:STATE_ERROR、STATE_ABORT、STATE_NULL、STATE_READY、STATE_JOINED、STATE_LISTENING;
保存服務器分配的會話 ID,在建立連接之後的每次請求中會附上會話 ID 表明身份;
提供了 join()、leave()、subscribe()、 unsubsribe()、listen() 等 API 供頁面調用;
提供了處理響應的 JavaScript 函數接口 onData()、onEvent()…
網頁可以很方便地使用這兩個 JavaScript 庫文件封裝的 API 與服務器進行通信。
客戶端與服務器端通信信息格式
pushlet 定義了一套客戶與服務器通信的信息格式,使用 XML 格式。定義了客戶端發送請求的類型:join、leave、subscribe、unsubscribe、listen、refresh;以及響應的事件類型:data、join_ack、listen_ack、refresh、heartbeat、error、abort、subscribe_ack、unsubscribe_ack。
服務器端事件隊列管理
pushlet 在服務器端使用 Java Servlet 實現,其數據結構的設計框架仍可適用於 PHP、C 編寫的後臺客戶端。
Pushlet 支持客戶端自己選擇使用流、拉(長輪詢)、輪詢方式。服務器端根據客戶選擇的方式在讀取事件隊列(fetchEvents)時進行不同的處理。“輪詢”模式下 fetchEvents() 會馬上返回。”流“和”拉“模式使用阻塞的方式讀事件,如果超時,會發給客戶端發送一個沒有新信息收到的“heartbeat“事件,如果是“拉”模式,會把“heartbeat”與“refresh”事件一起傳給客戶端,通知客戶端重新發出請求、建立連接。
客戶服務器之間的會話管理
服務端在客戶端發送 join 請求時,會爲客戶端分配一個會話 ID, 並傳給客戶端,然後客戶端就通過此會話 ID 標明身份發出subscribe 和 listen 請求。服務器端會爲每個會話維護一個訂閱的主題集合、事件隊列。
服務器端的事件源會把新產生的事件以多播的方式發送到每個會話(即訂閱者)的事件隊列裏。

官網: http://www.pushlets.com/

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章