2016-12-16 3 views
2

Suite à la question Does OkHttp support HTTP/2 server push?, existe-t-il des exemples disponibles sur la façon dont la réception de contenu poussé du côté client pourrait être implémentée?Comment mettre en œuvre la réception d'un serveur push dans OkHttp?

Comment l'interaction de OkHttpClient, Request, Response et Http2Connection sera? Je comprends que le Http2Connection a un PushObserver, mais comment jouera-t-il avec OkHttpClient et Request/Response?

Considérons l'extrait ci-dessous. Il y a un client et une demande. Comment vont-ils venir avec le 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); 
    } 

Répondre

2

OkHttp n'a pas d'API publique pour le serveur push et il est peu probable de les obtenir. Nous construisons des mécanismes pour maintenir les réponses poussées dans le cache, mais il est peu probable que cela soit visible pour le code de l'application. Vous obtenez juste une réponse plus rapide parfois parce que le serveur l'a poussé dans le cache.

Si vous avez besoin de ce type de comportement, veuillez consulter les sockets Web.

+0

Cela répond à ma question, merci! – Erunafailaro

+1

OkHttp 3.5.0 prend désormais officiellement en charge WebSocket. Voir l'exemple: http://howtoprogram.xyz/2016/12/24/websocket-client-example-okhttp/ – NangSaigon