2016-12-16 2 views
2

질문 후 Does OkHttp support HTTP/2 server push? 다음에 클라이언트 측에서 푸시 콘텐츠를 수신하는 방법을 구현할 수있는 예가 있습니까?OkHttp에서 서버 푸시 받기를 구현하는 방법은 무엇입니까?

OkHttpClient, Request, Response 및 Http2Connection의 상호 작용은 어떻게됩니까? Http2Connection에는 PushObserver가 있지만 이것이 OkHttpClient 및 Request/Response와 함께 어떻게 작동할까요?

아래 스 니펫을 고려하십시오. 클라이언트와 요청이 있습니다. PushObserver와 함께 어떻게 될까요?

OkHttpClient client = getOkHttpClient(); 
    Request request = new Request.Builder() 
      .url("https://nghttp2.org:443") // The Http2Server should be running here. 
      .build(); 
    try { 
     Socket socket = client.socketFactory().createSocket(); 
     Http2Connection con = new Http2Connection.Builder(true) 
      .socket(socket) 
      .pushObserver(new PushObserver(){ 

      @Override 
      public boolean onRequest(int streamId, List<Header> requestHeaders) { 
       // do something here 
       return true; 
      } 

      @Override 
      public boolean onHeaders(int streamId, 
       List<Header> responseHeaders, boolean last) { 
       // do something here 
       return true; 
      } 

      @Override 
      public boolean onData(int streamId, BufferedSource source, 
       int byteCount, boolean last) throws IOException { 
       // do something here 
       return true; 
      } 

      @Override 
      public void onReset(int streamId, ErrorCode errorCode) { 
       // do something 
      } 
     }).build(); 

    } catch (IOException e) { 
     LOG.error("IOException", e); 
    } 

답변

2

OkHttp에는 서버 푸시에 대한 공개 API가 없으므로 얻을 수 없습니다. 푸시 된 응답을 캐시에 유지하는 메커니즘을 구축하고 있습니다. 응용 프로그램 코드에서 볼 수있는 것 같지 않습니다. 서버가 캐시로 밀어 넣기 때문에 가끔씩 빠른 응답을 얻을 수 있습니다.

이런 종류의 동작이 필요한 경우 웹 소켓을 확인하십시오.

+0

내 질문에 대한 답변입니다. 감사합니다. – Erunafailaro

+1

이제 OkHttp 3.5.0이 공식적으로 WebSocket을 지원합니다. 예 : http://howtoprogram.xyz/2016/12/24/websocket-client-example-okhttp/ – NangSaigon

관련 문제