哪裏是有內存不足的問題,我需要發佈大量消息的外部HTTP服務器我有一個問題,當沒有任何效果。我的HTTP客戶端代碼沒有超時。 可以通過使用kill -STOP暫停HTTP服務器進程(撤消,使用kill -CONT)來重現此行爲。HttpURLConnection的#setReadTimeout POST操作大的消息
我發現使用下面的代碼,如果我保持我的請求很小,整個消息被寫入輸出流和getResponseCode超時。
有了像下面這樣的大消息,代碼將寫入輸出流。我認爲我已經填充了套接字緩衝區。代碼然後永遠不會超時。
我在尋找的是一種在寫請求時控制超時的方法。
我嘗試了類似的使用Apache HttpClient的東西,並得到了類似的結果。 我試着在不同的線程中運行下面的Java代碼,並自己中斷它,但線程仍在運行。
我需要保持流的行爲,但我希望任何的想法變成我如何能夠獲取客戶端代碼超時。
感謝,
PJ
URL url = new URL("http://unresponsive/path");
HttpURLConnection conn = (HttpURLConnection)url.openConnection();
conn.setDoInput(true);
conn.setDoOutput(true);
conn.setUseCaches(false);
conn.setConnectTimeout(10000);
conn.setFixedLengthStreamingMode(4 * 1000000);
conn.setRequestProperty("Content-Length", "4000000");
conn.setReadTimeout(10000);
conn.setRequestMethod("POST");
OutputStream os = conn.getOutputStream();
for(int i = 0; i < 1000000; i++) {
if(i % 1000 == 0) {
System.out.println("write: " + i);
}
os.write("test".getBytes("us-ascii"));
}
os.close();
System.out.println("response-code: " + conn.getResponseCode());
InputStream is = conn.getInputStream();
InputStreamReader isr = new InputStreamReader(is);
BufferedReader br = new BufferedReader(isr);
String line;
while((line = br.readLine()) != null) {
System.out.println(line);
}
is.close();
謝謝jayunit100。據我所知,讀超時應該只適用於反應的讀數,但有一個設置寫入超時沒有方法。我已經設置了連接超時,但這也沒有幫助。 –