Sto implementando una libreria Server-Sent Events utilizzando OkHttp. Server Sent Events funziona mantenendo una connessione HTTP aperta al server su cui 'eventi' possono essere trasmessi in streaming al client. La connessione si chiude solo sugli errori o se il client si disconnette esplicitamente.Streaming corpo risposta okhttp
Qual è il modo migliore per ottenere questo comportamento di streaming utilizzando OkHttp? Ho cercato di fare qualcosa di simile:
response.body().source().readAll(new Sink() {
@Override
public void write(Buffer source, long byteCount) throws IOException {
Log.d(TAG, "write(): byteCount = "+byteCount);
}
@Override
public void flush() throws IOException {
Log.d(TAG, "flush()");
}
@Override
public Timeout timeout() {
return Timeout.NONE;
}
@Override
public void close() throws IOException {
Log.d(TAG, "close()");
}
});
Con questo approccio sarò finalmente vedere il messaggio di log in write()
, ma a volte può prendere un po 'di tempo (minuti). Questo mi fa pensare che potrebbe esserci un po 'di buffering in corso sotto il cofano e non ottengo i miei dati fino a quando il buffer non viene scaricato.
Ho usato curl
per verificare che il server si comporti correttamente. I dati sono inviati in tempo, non ricevo la mia richiamata quando arriva.
La mia esperienza con OkHttp
e Okio
è molto limitata, quindi è molto probabile che abbia incasinato qualcosa o abbia dimenticato di impostare qualche opzione. Qualsiasi aiuto è molto apprezzato! :)
Questa libreria è disponibile da qualche parte? :) – wblaschko