2013-04-18 43 views
0

我在其中一個報告網頁上下載了「csv」鏈接,.csv文件的典型輸出大約爲4MB,通常需要大約5分鐘才能完成運行查詢並且使用單個線程提供結果。基於Web的CSV導出的Java IO異常

其中的一個用戶繼續運行到這個問題:

[com.jspbook.GZIPResponseWrapper:的finishResponse]異常:java.io.IOException異常:該輸出流已經關閉

還有在服務器日誌中引用斷開的管道異常。

當用戶遇到這個錯誤時,我從服務器的角度來看所有的事情都會按時完成。

對於用戶,導出鏈接自旋無限且永不返回數據。

是什麼原因導致了這個問題,並且有沒有辦法保持與瀏覽器的連接?

+0

什麼是瀏覽器超時值? – 2013-04-18 03:36:32

+0

瀏覽器不超時,它繼續旋轉,就像它正在獲取結果一樣。用戶運行1小時未收到響應的IE超時。 – wintermute 2013-04-18 03:48:56

回答

1

檢查服務器的連接超時設置。等待5分鐘是很長的時間。

看起來像連接超時或斷開。當您的查詢結束但連接已關閉時,服務器會嘗試寫入響應。

如果生成速度不快,那麼當文件通過網絡套接字或連續輪詢從客戶端獲得時,請推送給用戶。

1

在繼續通過@Bhushan Bhangale-

如果服務器需要很長的時間來響應回答,連接被關閉。所以在這樣的情況下處理需要較長的時間(以創建響應),是─

  1. 當你的請求,啓動服務器
  2. 一個2個線程的選項之一是排序 - 所散發出來的超時時間間隔
  3. 另外一個,實際上觸發一個查詢到數據庫,並創建一個.csv文件

記住,這得要求有主線程之前只需2-3秒計時器等待它通過上面開始的一個線程通知。這可能不是一個好的做法,但在一些奇怪的情況下,沒有別的選擇。

現在,

1。如果第(定時器)線程完成之前的響應是準備好了,它只是設置一個標誌,並給出回消息給用戶,所述服務器仍在處理請求

2.對於第二個線程,可能有兩個條件 -

a。響應(.csv文件)在標誌由第一個線程設置之前準備就緒,因此它只是發回響應(文件)並取消定時器(第一個)線程
b。如果它發現標誌已設置(表示響應已經發送),它可以忽略響應(可能會刪除文件)或通過電子郵件發送文件(如果可以合併此功能)

這些線程不能自己發回響應,他們必須通知主線程,它會將響應發送給用戶。您需要設置適當的標誌/值,以便主線程知道要發送的響應類型。

希望這會有所幫助。