Я реализую библиотеку Server-Sent Events с использованием OkHttp. Server Sent Events работает, поддерживая открытое HTTP-соединение с сервером, на котором «события» могут быть переданы обратно клиенту. Соединение будет закрываться только при ошибках или если клиент явно отключается.Streaming okhttp response body
Каков наилучший способ достижения этого потокового поведения с помощью OkHttp? Я пытался сделать что-то вроде:
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()");
}
});
С таким подходом я в конечном итоге увидеть сообщение войти write()
, но иногда это может занять некоторое время (минуты). Это заставляет меня думать, что под капотом может быть какая-то буферизация, и я не получаю свои данные до тех пор, пока буфер не будет сброшен.
Я использовал curl
, чтобы убедиться, что сервер ведет себя правильно. Данные отправляются вовремя, я просто не получаю свой обратный вызов, когда он прибывает.
Мой опыт работы с OkHttp
и Okio
очень ограничен, поэтому очень возможно, что я что-то испортил или забыл установить какой-то вариант. Любая помощь очень ценится! :)
Является ли эта библиотека доступной где-нибудь? :) – wblaschko