2016-12-16 5 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

関連する問題