簡體   English   中英

Java,增加套接字超時

[英]Java, increase the socket timeout

我有一個簡單的服務器客戶端應用程 一切正常,但在某個階段,從服務器獲取響應需要5分鍾以上(這是正常的,它需要像這樣)。 問題是如果需要超過5分鍾,我會不斷收到此異常: java.net.SocketTimeoutException: Read timed out

所以我想知道在Windows或我可以設置的Java虛擬機上是否存在默認套接字超時? 我無法更改客戶端代碼,因此setSoTimeout()不是我的選項。

使用Windows XP ..

編輯:據我所知,現在是在客戶端沒有打開套接字連接。 它從服務器傳遞。 所以我反編譯了服務器jar文件。 但仍然無法找到有關超時的任何信息。

默認套接字超時為0,表示永不超時。 如果它在5分鍾后實際超時,則表示它已在代碼中設置。 如果源不可用,並且沒有配置,您可以嘗試反編譯該類,並查找setSoTimeout調用。

由於注釋以及搜索未找到任何setSoTimeout()調用的事實,您可以采用不同的方法。 只是讓它超時,然后編寫一個小腳本,它將重試該調用,以防萬一。 如果可以從命令行調用客戶端,則可以解析輸出,如果它在stderr上運行。

在沒有任何流量的情況下長時間保持未使用的TCP連接並不是那么簡單。 一些超時后,許多防火牆/路由器關閉未使用的端口。

一種選擇可能是實現簡單的keepalive協議,偶爾發送虛擬包,但如果你不能觸摸客戶端代碼,這可能不是一個選項。

編輯:我不知道有任何方法來覆蓋客戶端代碼中設置的setSoTimeout()。

回答0是默認超時是不正確的。 例如,由於Axis2客戶端具有默認的60秒超時,因此它將取決於您用於進行呼叫的實現類型。

你能提供更多細節嗎? 很抱歉寫在答案部分,但我沒有足夠的聲譽做評論:)

你需要保持連接活着嗎? 為什么不重新考慮它以使其更加異步。 該架構根本沒有擴展。 有一次,所有可用線程都可能正在等待服務器的長時間響應。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM