2012-08-23 5 views
1

왜 데이터에 대한 첫 번째 HTTP 요청이 너무 느립니까?android httpurlconnection이 데이터 연결이 느립니다.

다음 행에서 뭔가를 사용하고 있습니다. 3 개의 HTTP 요청을 연속적으로 (한 번에 하나씩) 한 다음 지정된 시간 동안 기다렸다가 3 회의 HTTP 요청을 반복합니다.

기본적으로 작동하는 keep-alive를 사용하고 있지만 첫 번째 HTTP 요청에서 3 HTTP 요청으로 시작할 때마다 2 초의 패널티가 있습니다. 첫 번째 HTTP 요청에만이 2 초의 벌칙이 있습니다. 200ms와 같은 연속적인 HTTP 요청을 기다리는 시간을 줄이면 모든 요청이 빠르며 처음 2 초의 페널티를 보지 않아도됩니다.

분명히 이것은 첫 번째 요청이 연결 유지 연결을 사용하지 않을 수도 있지만 실제로는 그렇지 않습니다. 서버에서 tcpdump를 실행하면 모든 요청이 닫히지 않고 새 연결을 다시 구축하지 않고 동일한 TCP 연결을 사용하고 있음을 분명히 알 수 있습니다. 응용 프로그램에서 대기하는 시간이 예를 들어 5 초인 동안 서버의 활성 상태 설정은 60 초로 설정됩니다. 또한 내가 WIFI로 전환 할 때 나는 볼 수 없다. 같은 시간에 모든 요청을 기다리는 것이 빠릅니다.

는 HTTP 연결 코드는 HttpURLConnection의를 사용하고 다음과 같습니다 :

m_res.error = null; 
HttpURLConnection connection; 
try { 
    connection = (HttpURLConnection)(new URL(m_url + "/" + m_call.command).openConnection()); 
    connection.setDoOutput(true); // triggers POST. 
    connection.setDoInput(true); 
    connection.setRequestProperty("Accept-Charset", m_charset); 
    connection.setRequestProperty("Content-Type", "application/x-www-form-urlencoded;charset=" + m_charset); 
    connection.setRequestProperty("Connection", "Keep-Alive"); 
    connection.setRequestProperty("Accept-Encoding", "gzip"); 
    //connection.setChunkedStreamingMode(0); 
    OutputStream output = null; 

    try { 
     output = connection.getOutputStream(); 
     output.write(m_call.query_string.getBytes(m_charset)); 
     InputStream response = null; 
     try { 
      response = connection.getInputStream(); 
      if ("gzip".equals(connection.getContentEncoding())) { 
       response = new GZIPInputStream(response); 
      } 
     } 
     catch (IOException e) { 
      response = connection.getErrorStream(); 
     } 
     if (response == null) { 
      m_res.error = "Connection Error"; 
     } 
     else { 
      m_res.body = getAsString(response); 
      m_res.status = connection.getResponseCode(); 
     } 
    } 
    catch (IOException e) { 
     e.printStackTrace(); 
     m_res.error = "Connection Error"; 
    } 
    finally { 
     if (output != null) 
       try { 
        output.close(); 
       } catch (IOException logOrIgnore) {} 
     } 
    } 
} 
+0

귀하의 질문은 ... –

+0

왜 데이터 연결에 대한 첫 번째 HTTP 요청이 너무 느 립니까? – domcyrus

답변

0

나는이에 대한 하나의 가능한 답은 IP 아래 계층의 장치 데이터 연결이 변화하고 있다는 생각 상태 예를 들어, 주어진 시간 동안 들어 오거나 나가는 데이터가 없을 때 시작되는 일종의 대기 상태가있을 수 있습니다. 내 예제에서는 5 초.

+0

이것은 실제로 전화가 작동하는 방식입니다. 유휴 상태 일 때 연결하는 데 약간 더 긴 대기 상태가됩니다. 더 이상 유휴 상태로 유지되면 라디오를 끄고 유휴 상태가됩니다. –

+0

어딘가에 문서화되어 있습니까? – domcyrus

+0

여기 있습니다 : http://blog.radioactiveyak.com/2012/03/understanding-mobile-radio-state-to.html –

0

네트워크 수준에서 어떤 일이 일어나는지 볼 수있는 ARO 도구를 확인하십시오. https://developer.att.com/developer/aro 분석기는 발생하는 모든 다른 네트워크 통신을 보여주고 네트워크를보다 효율적으로 사용할 수 있도록 도와줍니다. 내 의견에 게시 한 다른 링크는 상태 시스템을 설명하고 유휴 상태 일 때 연결이 다른 시간에 어떻게되는지 설명합니다. 당신이 발리 라이브러리와 그것의 기능을 사용할 수 있습니다

+0

귀하의 링크는 다음과 같습니다. 부서진 – anivaler

관련 문제