2016-12-16 23 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-интерфейсов для push-сервера и вряд ли их наберет. Мы создаем механизмы для сохранения нажатых ответов в кеш, бит, маловероятно, что это будет видно на код приложения. Иногда вы получаете быстрый ответ, потому что сервер вставлял его в кеш.

Если вам требуется такое поведение, посмотрите на сетевые сокеты.

+0

Это отвечает на мой вопрос, спасибо! – Erunafailaro

+1

OkHttp 3.5.0 теперь официально поддерживает WebSocket. См. Пример: http://howtoprogram.xyz/2016/12/24/websocket-client-example-okhttp/ – NangSaigon