2013-11-02 5 views
5

Я хочу написать систему, использующую netty-4, где сервер получает запрос от одного канала (умело дублируется в), выполняет преобразование и потенциально переносит результат на другой канал другая бэкэнд-система (ок. вне).Распространение противодавления между двумя сетчатыми каналами

Но я хотел бы, чтобы распространять противодавление от из канала в в канале? В частности, —, потому что нетто-API являются асинхронными — как получить уведомление, когда out больше не заблокирован; и сообщить в, чтобы приостановить/возобновить?

Частичные решения

Я считаю, что могу сказать, когда из канал готов писать с channel.isWritable().

Ответ на вопрос this question упоминает об отключении AUTO_READ, но тогда я считаю, что должен был отвечать за опрос канала для чтения. Я не рад этому — , если Я могу получить сообщение, когда оно будет готово для чтения. На данный момент, полезность использования netty - это в основном только буферы без копирования и суперкласс класса ByteToMessageDecoder.

ответ

5

Чтобы добавить к ответу Игоря - у вас есть несколько вариантов для повторного чтения. Первый, показанный here, означает захват события channelWritabilityChanged на целевом канале. Вы можете проверить статус канала и включить автоматическое чтение на исходном канале.

В качестве альтернативы пример прокси показывает установку прослушивателя завершения записи для записи и очистки. Этот метод также работает, но не использует преимущества системы ожидания Net/High Water, поскольку вам будет сказано, что запись завершена после того, как запись была сброшена в сетевые буферы.

3

Справа вы можете отключить AUTO_READ на IN-канале, когда OUT не доступен для записи и снова включите AUTO_READ, когда OUT будет готов. Здесь не требуется опрос.

Смежные вопросы