我很想將服務器端事件的支持添加到CppCMS。我瞭解在通信級別上做什麼的技術部分:客戶端發送長輪詢XmlHTTPRequest並等待響應, 服務器接受連接,並在服務器端事件發生之前不響應,並向客戶端發送 響應。客戶端重複該過程。服務器推送技術(COMET)的API模型
但是,這對大多數Web開發人員來說太「低」了。有很多問題:我如何管理事件,如何管理連接等等。
我想到了兩個可能的模式:
有 例如定義了一些命名事件和服務器端,「在聊天室沒有134新信息」; 當請求接受服務器端應用程序檢查房間中的消息 (例如在數據庫中)並且如果客戶端沒有新消息 它訂閱事件並在其上等待。
當一些其他的客戶端數據發佈到服務器,它會通知上 的「聊天室新郵件沒有134」事件中的所有應用程序,他們醒來,發送這些消息 給客戶,等等。
該模型仍然看起來很「低級」模型,但它隱藏了所有的 通知方法。
另一個選擇是定義一些命名隊列,因此每個客戶端在連接到服務器時創建這樣的隊列,並等待新消息。當某些客戶端 向「聊天室號134」發佈新消息時,在服務器端向連接到該「聊天室號134」的所有隊列廣播 ,並將該消息發送給客戶端 。
但也有被上升許多問題:
- 如何管理隊列和會話水平,單頁的水平?
- 如何刪除隊列並在其上創建超時?
- 如果多於一個「窗口」訂閱相同的隊列會發生什麼?
在服務器端創建一個持久對象,該對象在服務器端事件 和用戶端事件之間進行粘合。它可以通過重定向到的 不同的XHR請求進行通信。
因此客戶端(JavaScript)註冊事件並使用XHR 和服務器端分派的事件通知等待它們,直到頁面重建。
所以,我想知道,什麼是最流行的,並建議背後的服務器端推送技術 API模式?
感謝
編輯:增加了第三個選項
如果是這樣,它會更類似於第二個... – Artyom 2009-08-11 04:13:42