Правильный подход - использовать противодавление TCP, что означает, что ваш прокси не читает больше, чем может записать. Это достигается путем отправки сигнала TCP ACK только после того, как вы будете готовы получить больше.
Подход, основанный только на измерении пропускной способности, не подходит, поскольку он не имеет дело с временным ухудшением. (Такое измерение тривиально достичь, посчитав размер буферов в скользящем временном окне.)
Netty предлагает API для противодавления TCP, что вам нужно. Вам «просто» нужно включить автоматическое чтение с ChannelOption.AUTO_READ
, установленным на false
, и вызывать Channel.read()
явно после успешной записи.
Я предлагаю вам внимательно посмотреть пример прокси Netty , который отключает AUTO_READ
.
LittleProxy - более сложный фрагмент кода, который также контролирует пропускную способность.