2011-01-16 4 views
2

(Microsoft AUTD ActiveSync 기반의 ->http://technet.microsoft.com/en-us/library/aa997252.aspx) 내 안드로이드 응용 프로그램에서 긴 폴링 푸시 서비스를 구현하려고합니다.안드로이드 https 긴 폴링 : 폴링 간격이 70 초보다 길면 응답을받지 못합니다.

Tomcat 7.0에서 실행되는 Servlets 3.0이있는 서버 부분을 이미 실현했습니다. 내 AsyncServlets CURL 함께 테스트 한 모든 작동합니다.

내 AsyncServlet 테스트를 어떻게

:

HttpParams httpParams = mDefaultHttpClient.getParams(); 
HttpConnectionParams.setConnectionTimeout(httpParams, CONNECTION_TIMEOUT); 
HttpConnectionParams.setSoTimeout(httpParams, mHeartbeat + TIMEOUT_TOLERANCE); 
mDefaultHttpClient.setParams(httpParams); 

HttpGet httpGet = new HttpGet(mPushURL); 
httpGet.addHeader("Accept", "application/json"); 

try { 
    Log.i(TAG, "Executing GET(PUSH) request " + httpGet.getRequestLine()); 
    HttpResponse httpResponse = mDefaultHttpClient.execute(httpGet); 
    Log.i(TAG, httpResponse.getStatusLine().toString()); 
    Log.i(TAG, convertInputStream(httpResponse.getEntity().getContent())); //For testing purposes 
} catch (ClientProtocolException e) { 
    e.printStackTrace(); 
} catch (IOException e) { 
    e.printStackTrace(); 
} 

: 다음 코드 내 안드로이드 응용 프로그램에

curl "https://webservice.mydomain.net/push?id=1&heartbeat=180000" --insecure --user user:password -D - 

서버 응답 3 분 후 (하트 비트 간격)

HTTP/1.1 200 OK 
Server: Apache-Coyote/1.1 
Pragma: No-cache 
Cache-Control: no-cache 
Expires: Thu, 01 Jan 1970 01:00:00 CET 
Content-Type: application/json;charset=ISO-8859-1 
Content-Length: 0 
Date: Sat, 15 Jan 2011 23:38:57 GMT 

내가 사용을 몇 가지 검사를 했어. 하트 비트 간격을 70 초로하면 응답을받습니다. 70 초 초과의 하트 비트 간격을 사용하면 지정된 하트 비트 간격 이후에 HTTP 200 OK 응답 대신 SocketTimeoutException이 수신됩니다. (명확히하기 위해 : 내 SocketTimeout (SoTimeout)이 올바르게 작동하지만, 연결이 끊어져 버린 것 같습니다. 이유는 모르겠습니다.)

모든 응답에 감사드립니다. 추가로

답변

1

사용 URLConnection의 및 설정 readTimeOut. 말하기는 어렵다. 나는 안드로이드 네트워크 레이어가 열려있는 연결을 얼어 있다고 생각합니다. (비슷한 프로젝트를 진행 중입니다. 열린 연결이 멈추는 이유를 찾지 못했습니다.)

1

시도 :

ConnManagerParams.setTimeout(params, CONNECTION_TIMEOUT);