2012-04-20 159 views
0

我的工作與的Apache Tomcat 7JSPServlet的)。在我的應用程序中,我需要從服務器發送一些消息到客戶端。貝婁,我會解釋一下我正在做的事情。從服務器發送消息給客戶端的Java

簡要說明:該應用程序會彈出一個登錄如果當他想連接到互聯網,用戶不會在每次登錄。在用戶登錄成功並且他的時間將要結束後,我將需要向客戶端發送留下剩餘時間的消息(例如在最近幾分鐘內)。在特定時間打開廣告彈出窗口也是另一個要求。

我現在約JMS但我不知道這適合我的情況。我也在其他帖子閱讀,WebSocket也可以選擇。

我在CentOS 6.2上運行服務器。

問題:對於這種情況,你有沒有關於如何使用Java的技術把它的一些想法?如果您有其他想法,請隨時公開!

N.B.關於JavaScriptPHP我在SO的問題上找到了很好的答案。我對如何解決這個問題感興趣,尤其是Java技術。

+2

JSP和servlet僅在發出請求時執行。因此,您可以在會話範圍內跟蹤用戶的時間,並檢查每個後續請求是否即將結束。但是如果你想要真正基於時間的東西,你也需要使用一些客戶端解決方案。在服務器端繼續執行,但允許客戶端請求重新激活會話。 – Eddie 2012-04-20 12:57:30

回答

1

您將無法啓動從服務器到客戶端的HTTP連接。一種解決方案將是使用WebSocket/Comet Framework。不幸的是,websocket目前並不是真正廣泛的(服務器+瀏覽器)。我會建議你使用一個框架來填補「空白」:https://github.com/Atmosphere/atmosphere

1

我不明白你對我們在Java中實現解決方案的癡迷 - 任何有效的解決方案都應該可以跨不同的服務器端語言進行移植。但是,如果終止是在沒有同步用戶驅動的交互的情況下發生的,那麼您只是在這裏嘗試處理它而在您的服務器上創建負載。如果你想讓別人爲你編寫代碼,那麼這不是合適的論壇。

我現在關於JMS .... CentOS 6.2。

這裏沒什麼幫助。

我們真的需要知道的事情是,你的意思:

用戶登錄成功,他的時間將要結束

後(我假設你指的是會議時間將會結束,除非你已經寫了一些預測人們死亡的軟件)。

您如何確定會議何時結束?

  1. 這是每頁的時間限制嗎?
  2. 從他們登錄的時間開始是固定的時間嗎?
  3. 會話是否被Java垃圾收集?

在1的情況下,最簡單的方法是使用javascript在頁面上設置超時(當用戶導航到新屏幕時,超時將被丟棄)。

setTimeout(function() { 
    alert('5 minutes has expired since you got here - about to be logged out'); 
}, (300000)); // 5 minutes 

在第二種情況,那麼你仍然會使用上面的方法,而是減少對已經度過了服務器上的時間的JavaScript的超時時間(使用Java編寫的JavaScript,或刪除的cookie包含登錄時的javascript時間戳)。

在第三種情況下......您真的沒有任何方式知道用戶何時會註銷。

相關問題