Я использую netty для разработки приложения, которое будет прослушивать определенный порт через TCP.После получения байтов у меня есть конвейер с бизнес-логикой для работы с полученными байтами.Этот конвейер состоит из нескольких обработчиков каналов, таких как декодер заголовка, обработчик фрагментации на уровне приложения и т. Д. В конце конвейера после обработки сообщения последний обработчик в конвейере (скажем, BufferWriter) помещает обработанное сообщение в очередь блокировки.Эта очередь блокировки действует как буфер, а BufferWriter действует как производитель.Обратите внимание, что эта очередь блокировки является общей для всех каналов.Таким образом, все данные, полученные приложением, будут записаны в одну очередь.Есть еще одна запланированная служба исполнителя, которая будет работать как потребитель этого буфера.Этот потребитель является периодическим заданием, которое запускается через определенный промежуток времени и принимает сообщение из буфера и записывает в файл.
Проблема, с которой я столкнулся, заключается в том, что при большом количестве входящего трафика мой поток потребителя не можетподдерживать темп.В результате чего очередь буфера заполняется.
В netty, есть ли способ замедлить скорость чтения из сокета, чтобы потребитель не отставал от производителя?Примерно так: когда буфер заполнится, netty не будет читать из сокета, и всякий раз, когда в буфере будет свободное место, он будет возобновлять чтение из сокета.
Обратите внимание, что в этом случае отправитель не записывается в java /Нетти.Это c программа, которая сформирует TCP соединение с моим сервером и начнет отправку данных.Я предполагаю, что, когда я замедляю скорость чтения моего сокета сервера, TCP будет автоматически замедлять отправителя, используя политику контроля перегрузки (медленный запуск)