有沒有辦法找出HttpServletRequest是否中止?在HttpServlet中檢測中止的請求
我正在編寫即時瀏覽器應用程序(某種聊天):客戶端使用AJAX-HTTP請求在循環中要求新事件。服務器(Tomcat)處理HttpServlet中的請求。如果此客戶端沒有新事件,則服務器延遲迴復,直到發生新事件或發生超時(30秒)。
現在我想識別不再輪詢的客戶端。因此,我在一個請求結束時啓動一個kick-Timer,這個請求在新的請求到達時停止。如果客戶端關閉瀏覽器窗口,則TCP連接關閉,並且HTTP請求被中止。
問題:客戶端不會遇到kick-Timeout,因爲Servlet仍然處理事件請求 - 休眠和等待事件或超時。
如果我能以某種方式偵聽連接中止事件,然後通知等待請求以阻止它,那將是非常好的。但我在HttpServletRequest或HttpServletResponse中找不到類似的東西...
您使用什麼API /框架來處理異步請求和/或HTTP推送?你的問題聽起來/讀起來很奇怪,因爲這不是標準的Servlet API正常工作的方式,所以我猜你正在使用一些API /框架來實現它(例如Comet,Atmosphere,Servlet 3.0異步等) 。不是那樣,就是你做的事情完全錯了。 – BalusC 2010-12-06 23:24:20
我沒有使用任何框架。它是如此簡單: ::::::: UpdateServlet的doGet-方法 (1)獲取從updateClient會話 (2)從updateClient (3)打印編碼事件列表獲取。 ::::::: UpdateClient getEvents-方法 (1)等待,如果沒有事件等待 (2)返回事件 ::::::: UpdateClient的addEvent-方法 (1)增加的情況下列表 (2)通知等待線程 這些請求在不同線程中同時處理。 –
Escudo
2010-12-06 23:45:51