У меня есть следующий код
@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;
}