Ich implementiere eine Server-Sent Events Bibliothek mit OkHttp. Server Sent Events funktioniert, indem eine offene HTTP-Verbindung zum Server aufrechterhalten wird, auf dem Ereignisse zum Client zurückgestreamt werden können. Die Verbindung wird nur bei Fehlern geschlossen oder wenn der Client explizit die Verbindung trennt.Streaming okhttp Antwort Körper
Was ist der beste Weg, um dieses Streaming-Verhalten mit OkHttp zu erreichen? Ich habe so etwas wie zu tun versucht:
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()");
}
});
Mit diesem Ansatz werde ich schließlich die Log-Nachricht in write()
sehen, aber es kann manchmal eine ganze Weile (Minuten). Das lässt mich glauben, dass unter der Haube etwas Pufferung stattfindet und ich meine Daten erst bekomme, wenn der Puffer geleert ist.
Ich habe curl
verwendet, um zu überprüfen, ob sich der Server korrekt verhält. Die Daten sind werden pünktlich gesendet, ich bekomme gerade nicht meinen Rückruf, wenn es ankommt.
Meine Erfahrung mit OkHttp
und Okio
ist sehr begrenzt, so ist es sehr möglich, dass ich etwas vermasselt habe, oder vergessen habe, eine Option zu setzen. Jede Hilfe wird sehr geschätzt! :)
Ist diese Bibliothek irgendwo verfügbar? :) – wblaschko