我們有一個Web服務器,一個客戶端應用程序和一個服務器應用程序。下圖描述了結構。如何通知Web服務器響應長輪詢?
該系統的工作原理是這樣的:用戶改變一些事情上的客戶端應用程序,例如改變本書的書名。它將發送一個TCP/IP包到服務器應用程序。我的期望結果是,瀏覽器中顯示的書名應始終自動更改。據我所知,Web瀏覽器應該保持與Web服務器的長輪詢請求。我的問題是,服務器應用程序如何通知Web服務器有關更改?我應該使用哪種技術?
所有的應用程序都是用Java編寫的。
我們有一個Web服務器,一個客戶端應用程序和一個服務器應用程序。下圖描述了結構。如何通知Web服務器響應長輪詢?
該系統的工作原理是這樣的:用戶改變一些事情上的客戶端應用程序,例如改變本書的書名。它將發送一個TCP/IP包到服務器應用程序。我的期望結果是,瀏覽器中顯示的書名應始終自動更改。據我所知,Web瀏覽器應該保持與Web服務器的長輪詢請求。我的問題是,服務器應用程序如何通知Web服務器有關更改?我應該使用哪種技術?
所有的應用程序都是用Java編寫的。
我建議你使用JMS隊列。當Web瀏覽器轉向服務器執行長輪詢時,它應該到達連接到隊列的servlet並調用阻止方法。 當客戶端應用程序通知服務器應用程序。應該將適當的消息發送到隊列中。此時阻塞將返回,servlet將向Web瀏覽器發送更新消息,並返回阻止,直到發送下一個通知。
爲了避免會話之間的不匹配,您可以使用動態隊列或(更好)一個隊列,並使用與當前會話ID相同的選擇器。
可以將消息發送到使用JSON序列化的Web客戶端。
「彗星」是專爲長輪詢HTTP請求。詳情請參閱:http://en.wikipedia.org/wiki/Comet_(programming)。 有一些Comet的實現,例如:Nginx + mod_push,你的Server-app發送一個http到Nginx來推送一個msg,然後通過nginx發送給瀏覽器。