2011-01-25 32 views
2

我應該實現一個Web應用程序,其中用戶登錄並註冊某些事件(在本例中爲警報)。當發生警報時,服務器需要將警報推送給所有客戶端。使用Jetty延續GWT服務器推送?

目前我在客戶端

  • 碼頭使用

    • GWT在服務器端

    正在實施利用碼頭延續一個好主意服務器推送?我的要求是:

    • 客戶端的數量會變得相當小(< 20),但未來可能會增加
    • 報警必須不會迷路(即如果客戶端將下降,那就一定不要錯過任何警報)
    • 如果客戶端出現故障,需要將其他客戶端通知(或者至少管理員應該收到某種通知,例如通過郵件)。
  • 回答

    2

    使用Comet(例如Jetty Continuations)的主要原因是它允許減少輪詢頻率。換句話說:通過使用客戶端的頻繁輪詢,您可以在沒有Comet的情況下實現同樣的功能。選擇哪種選擇取決於您的應用程序的特性 - 取決於您的應用程序,每種選擇都可能比其他選項更有效率!

    就你而言,由於當客戶端出現故障時需要通知,所以使用頻繁輪詢很有意義。彗星(長輪詢)不適合完成此任務:由於其原理,在客戶發送新請求之前可能需要很長時間。接收新請求是服務器知道客戶端仍然存在的唯一方式(請記住,Web服務器 - 無論是否Comet都不能向客戶端發送請求)。

    1

    您的要求指出,警報不會丟失,意味着比長輪詢或頻繁輪詢更復雜的解決方案。

    您的客戶端應該向服務器發送確認消息,因爲您的用戶可以在報警消息到達後關閉應用程序,他/她可以丟失該報警。 此外,您的用戶應該單擊一條警報消息來確認服務器。你可以把時間限制承認,如果客戶端不發送一個ACK消息,那麼你可以假設報警已丟失..

    長輪詢確認algortihm將是我的選擇,以解決您的問題..