我正在使用Apache CXF Web服務堆棧。在操作完成之前,當客戶端超時或與服務器斷開連接時,服務器將繼續運行該操作直至完成操作。我想讓服務器檢測客戶端何時斷開連接並相應處理。檢測Web服務中的客戶端斷開連接
有沒有辦法檢測客戶端何時使用Apache CXF斷開連接?使用其他Java Web服務堆棧怎麼樣?
我正在使用Apache CXF Web服務堆棧。在操作完成之前,當客戶端超時或與服務器斷開連接時,服務器將繼續運行該操作直至完成操作。我想讓服務器檢測客戶端何時斷開連接並相應處理。檢測Web服務中的客戶端斷開連接
有沒有辦法檢測客戶端何時使用Apache CXF斷開連接?使用其他Java Web服務堆棧怎麼樣?
我不熟悉Apache CXF,但以下內容應適用於任何基於Java Servlet的框架。
爲了確定用戶是否已斷開連接(停止按鈕,關閉瀏覽器等),服務器必須嘗試發送數據包。如果TCP/IP連接已關閉,則會拋出IOException
。
理論上,Java應用程序可以在處理過程中的不同點發送空格字符。 IOException
將表示客戶端已經消失,並且處理可能中止。
但是,有可能是這種技術的幾個問題:
處理過程中發送的字符會導致反應是「承諾」,因此它可能無法設置HTTP頭,Cookie等基於長期運行的服務器端處理的結果。
如果輸出流被緩衝,則空格字符將不被立即發送,從而不進行充分的測試。作爲解決方法,可以使用flush()
。
對於給定的框架或視圖技術(JSP等)可能很難實現此技術。例如,頁面呈現代碼在響應提交後將無法發送內容類型。