簡體   English   中英

Java套接字連接在讀取最后一行之前掛起60秒

[英]Java socket connection hangs 60 seconds before reading last line

我已經通過Java套接字手動開發了一個肥皂連接(這是一個非常簡單的肥皂請求,而Axis產生了很多構建問題)。

為此,我基本上復制了從Soap UI退出時的HTTP標頭,並編寫了以下代碼:

String hostname = "aaaaa";
int port = 11111;
InetAddress  addr = InetAddress.getByName(hostname);
Socket sock = new Socket(addr, port);
sock.setSoTimeout(100000);
BufferedWriter  wr = new BufferedWriter(new OutputStreamWriter(sock.getOutputStream(),"UTF-8"));
wr.write("POST " + "http://aaaa:11111/servicePath" + " HTTP/1.1\r\n");
wr.write("Host: aaaaa:11111\r\n");
wr.write("Accept-Encoding: gzip,deflate\r\n");
wr.write("Content-Length: " + soapXml.length() + "\r\n");
wr.write("Content-Type: text/xml; charset=\"UTF-8\"\r\n");
//wr.write("Connection: Keep-Alive\r\n");
wr.write("SOAPAction: \"/someSoapAction\"\r\n");
wr.write("User-Agent: Apache-HttpClient/4.1.1 (java 1.5)\r\n");
wr.write("\r\n");
wr.write(soapXml);
wr.flush();

請求成功,這意味着我可以從服務中獲得期望的響應。 例如,當我用手寫的“ soapXml”輸入一些無效的參數時,XML會返回500錯誤以解釋該問題,如果正確設置所有內容,則會在標頭后出現一個帶有XML正文的200 OK。

問題是在200OK的情況下,套接字在讀取HTTP正文之前會掛起60秒。

它基本上讀取完整的標頭,然后等待60秒,然后(我認為某些協議超時,然后)最終讀取xml正文。

這是我讀取響應的代碼:

String line;
BufferedReader rd = new BufferedReader(new java.io.InputStreamReader(sock.getInputStream(),"UTF-8"));
while ((line = rd.readLine()) != null) { 
            i++;
            LOG.debug("cycle: "+i+" -------- "+line);
                     //after printing the header, it hangs 60 seconds before printing the follwing XML  
            if ((line.length() >0) && (line.charAt(0) == '<'))
            {
                responseXML = line;
            }
}

這是一個示例200 OK標頭:

HTTP/1.1 200 OK
Server: Apache-Coyote/1.1
Content-Type: text/xml;charset=utf-8
Content-Length: 1052
Date: Sun, 13 Jan 2013 08:33:45 GMT -- hanging 60 seconds here
-- blank line
<?xml version="1.0" encoding="UTF-8"?>................</SOAP-ENV:Envelope>

有人遇到過這個嗎? 請注意,這顯然不是服務器問題,因為使用soap UI會立即提供答案。

謝謝

服務器正在為HTTP保持活動狀態保持連接打開狀態,顯然是60秒超時。 要么更改為HTTP 1.0,要么記下返回的Content-length標頭,然后停止讀取那么多字節。

服務器環境更改(提供了新計算機)解決了該問題。

現在200OK的響應時間也低於1秒。

不幸的是,我沒有關於環境技術堆棧的任何細節。 無論如何,謝謝您的幫助。

暫無
暫無

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

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