Я настроил двунаправленную потоковую конструкцию в приложении для Android, где в настоящее время я использую механизм для отправки кусков больших файлов. Проблема, с которой я столкнулся, заключается в том, что мое приложение получит сообщение с запросом на файл, а затем я отвечу потенциально ответными сообщениями GRPC на сотни МБ, что часто приводит к OOM. Псевдокод:
public class Myclass implements StreamObserver<CameraRequest>, Closeable {
...
public void onNext(Request req) {
for (Chunk chunk : getChunks(req))
this.requestObserver.onNext(builder.setChunk(chunk).build());
}
...
}
Есть ли какой-нибудь хороший способ ограничить количество незавершенных вызовов onNext на основе того, что фактически было установлено на провод (и соответствующая память стала свободной)? IE разрешает только 10 вызовов onNext, затем последующие блокируются, пока данные для предыдущих вызовов не будут успешно отправлены базовым стеком протоколов? Я мог бы реализовать полное окно подтверждения e2e в своем проводном протоколе TCP, но надеялся, что есть более простая / встроенная техника, которую используют другие.
Спасибо!