2013-09-24 67 views
3

我使用Jersey HTTP服務器以及Jersey客戶端進行REST請求。澤西長時間運行的請求超時

客戶端向服務器發送文件,服務器處理文件並向客戶端返回響應。我的問題是,服務器上的處理可能需要幾分鐘,甚至可能需要1/2小時。

我希望客戶端知道請求是否在響應中失敗或成功。不過,我將客戶端的readTimeout設置爲60秒,因爲我讀過,將其設置爲0是一種不好的做法。因此,我有時會在客戶端上獲得SocketTimeoutException

禁用readTimeout是否安全(將其設置爲0)? connectTimeout仍然是10秒。

或者我可以使用TCP保持活着?據我瞭解,它只發送那些數十分鐘大的數據包(取決於操作系統)。

還有什麼我可以做,而不是立即返回一個令牌,然後用令牌輪詢服務器,如果處理成功了嗎?我讀了一些關於心跳包的地方。這可以用嗎?

回答

1

很明顯,你不應該把超時設置得太高,因爲這會使線程在等待。有多個請求會導致許多線程等待並導致服務器干擾。如果輪詢服務器以查看請求是否準備好並不是您想要做的事情,我建議您在請求中包含某種標識符,並讓服務器在其請求時返回答案准備好包含相應的標識符,然後在客戶端匹配請求和響應。

+0

我怎麼知道服務器準備好了?這將需要再次輪詢。 – Bantak