簡體   English   中英

如何通知Web服務器響應長輪詢?

[英]How to notify web server to response to a long-polling?

我們有一個Web服務器,一個客戶端應用程序和一個與之交互的服務器應用程序。 下圖描述了結構。

在此處輸入圖片說明

系統的工作方式如下:用戶更改客戶端應用程序上的某些內容,例如更改書名。 它將TCP / IP包發送到服務器應用程序。 我的預期結果是,應該始終自動更改Web瀏覽器中顯示的書名。 據我所知,Web瀏覽器應與Web服務器保持長期輪詢請求。 我的問題是服務器應用程序如何將更改通知Web服務器? 我應該使用哪種技術?

所有的應用程序都是用Java編寫的。

我建議您使用JMS隊列。 當Web瀏覽器轉向服務器執行長時間輪詢時,它應到達連接到隊列並調用阻塞receive()方法的servlet。 客戶端應用程序通知服務器應用程序時。 適當的消息應發送到隊列中。 此時,阻塞的receive()將返回,並且Servlet將向Web瀏覽器發送更新消息,然后返回阻塞的receive()直到將發送下一個通知。

為了避免會話之間的不匹配,您可以使用動態隊列,也可以(更好)使用一個選擇器等於當前會話ID的隊列。

可以將消息發送到使用JSON序列化的Web客戶端。

“ Comet”設計用於長輪詢http請求。 有關詳細信息,請參見: http : //en.wikipedia.org/wiki/Comet_(編程) 有一些Comet的工具,例如:Nginx + mod_push,您的Server-app將一個HTTP發送到Nginx來推送msg,然后通過nginx發送到瀏覽器。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM