Ответ 1
Некоторая информация о водяных знаках от этой статьи:
Например, представьте, что у вас есть очередь задач на стороне сервера, которая заполненных клиентами и обработанных бэкэндом. Если клиенты отправляют задачи слишком быстро увеличивается длина очереди. Нужно ввести так названный высоким водяным знаком и низким водяным знаком. Если длина очереди больше чем чтение стоп-листов с водяным знаком из сокетов и длина очереди убывать. Когда длина очереди становится меньше, чем низкий уровень водяного знака чтение задач из сокетов снова.
Примечание. Чтобы клиенты могли адаптироваться к скорости обработки задачи (фактически, чтобы приспособить размер окна), не следует делать большой пробел между высокими и низкими водяными знаками. С другой стороны, небольшое зазорное средство вы будете слишком часто добавлять/удалять сокеты из цикла событий.
Для Netty это кажется правдой, потому что this JavaDoc для ChannelConfig
говорит:
Если количество байтов, помещенных в буфер записи, превышает значение
writeBufferHighWaterMark
Channel.isWritable()
начнет возвращать false.
И для низкого водяного знака:
Как только количество байтов, помещенных в буфер записи, превысило и затем упал ниже этого значения, Channel.isWritable() снова вернет true.
О здравомыслии, я думаю, это относительный вопрос, который зависит от информации, которую вы отправляете по каналу и как часто. Строгих правил для каких значений вы должны определять для этих переменных. Поэтому, я думаю, вы должны найти свои собственные ценности на практике. Слайды показывают вам один из примеров этого.