2012-10-18 2 views
0

편안한 웹 서비스에서 데이터를 가져 오는 Android 애플리케이션을 개발 중입니다."Keepalive"연결을 사용하여 편안한 웹 서비스에서 데이터 폴링

나는 이것을 구현하는 가장 좋은 방법을 생각하고 있었고, 코드는 작동하지만 최적화 할 수 있다고 확신합니다. 여기에 내 현재 코드 상태 : 나는 스케줄러를 사용하여 서비스에서 restResource를 호출하고있다. 잘못된 부분은 모든 요청에 ​​대해 연결을 열고 닫는 것입니다.

 httpResponse = client.execute(request); 
     responseCode = httpResponse.getStatusLine().getStatusCode(); 
     message = httpResponse.getStatusLine().getReasonPhrase(); 

     HttpEntity entity = httpResponse.getEntity(); 

     if (entity != null) { 

      InputStream instream = entity.getContent(); 

      response = convertStreamToString(instream); 

      instream.close(); 
     } 

어떻게 응답과 함께 반환 된 킵 얼라이브 헤더의 사용을 만들 수 (그것이 하늘의 배열을 돌려줍니다 빈 때 나머지 자원은 실시간 데이터를 유지 (나는) 그것을 모든 초를 가져가)?

답변

1

long-polling을 사용하기 전에이 작업을 수행했습니다. 긴 폴링은 RESTful 호출이 시간 초과 또는 응답 할 때까지 차단됩니다. 어느 쪽이든 호출하는 클라이언트는 응답 (시간 초과 또는 유효) 중 하나에서 RESTful 서비스를 다시 호출합니다.

어떻게 keepalive 헤더를 사용할 수 있는지 잘 모르겠지만 보내고 나서 연결을 열어 두는 것만 같아 보입니다. 서버 측 자바 코드에서 응답을위한 출력 버퍼를 얻고 물건을 보내기 시작할 것이다. 클라이언트 측에서, 입력 버퍼를 얻으십시오. (안드로이드에서 이런 일이 일어나지는 모르겠지만 자바 코드가 인상적입니다. 그래서이 중 하나를 할 수있는 많은 방법이 있습니다.) 읽기를 시작하십시오. 어느 시점에서 나는 당신이 연결을 강제로 닫을 필요가 있다고 생각할 것입니다, 왜냐하면 당신은 무기한으로 열어 놓고 싶지 않기 때문입니다.

다시 한 번 이런 식으로 시도한 적이 없으므로 잘 모릅니다. 또한, 이것이 RESTful 서비스의 무언의 법칙을 어기는지 확실하지 않습니다. 나는이 접근 방식과 모순되는 어떤 것도 읽지 않았다.

+0

감사합니다 @ CodeChimp, 내가 무기한으로 보관하고 싶다고 말하면 어떻게 반복해서 응답을 읽을 수 있습니까? 콘텐츠가 처음으로 소비 된 것을 기억합니다. 연결을 유지하고 주기적으로 응답을 여러 번 읽으려면 java에서 적절한 방법은 무엇입니까? – john

+0

당신은 OutputStream을 잡고 그냥 닫지 않을 것이라고 생각합니다. 열려있는 한 연결은 열려있을 것입니다. 명심하십시오. HttpServletResponse에서 얻은 OutputStream은 궁극적으로 Socket에 연결되므로 소켓을 닫으면 소켓을 닫습니다. 이것은 양측 모두에 해당됩니다. – CodeChimp

관련 문제