netty channel isWritable true вызывает больше раз, чем false - PullRequest
0 голосов
/ 10 марта 2020

У меня есть следующий код

 @Override
    public void channelWritabilityChanged(ChannelHandlerContext ctx) throws Exception {

        if (ctx.channel().isWritable()) {
            log.info(" channel is writable again, autoread is ON");
            ctx.channel().config().setAutoRead(true);
        }
        else {
            log.warn(" channel is unwritable, autoread is OFF");
            ctx.channel().config().setAutoRead(false);
        }
        ctx.fireChannelWritabilityChanged();
    }

Вот мои вопросы.

1) Я бы предположил, что будет одинаковое количество журналов, которые выводили бы OFF против ON. Но в моем случае ON напечатал много по сравнению с OFF.
2) Я не установил нижний / верхний водяные знаки. Он использует значения по умолчанию 32 КБ / 64 КБ.
3) Я думал, что будет значение по умолчанию для ChannelOption.SO_SNDBUF. Но когда я печатаю, возвращаю как ноль Отличается ли этот буфер от буфера сокета ОС, который мы можем установить на уровне ОС? Должен ли я установить какое-либо значение, если так, что является хорошим значением?
4) Если isWritable имеет значение false, то Если я все еще хочу доставить сообщение, я должен использовать Очередь очередь в приложении и оставить там sh и как только доступное для записи истинно, тогда пишите на канал ?. В чем преимущество? Почему я не могу просто увеличить верхнюю отметку?
5) Я записываю много журналов на диск, будет ли это иметь какой-либо побочный эффект на то, что я пишу на канал (относительно ввода / вывода / процессора).

while (c.isWritable()) {

  c.writeAndFlush(message);
  break;
}
...