Почему не вызывается ctx.flu sh () после вызова ctx.write () в руководстве пользователя Netty? - PullRequest
0 голосов
/ 21 января 2020

В netty Java документ говорит, что so be sure to call flush() once you want to request to flush, но в этом примере он говорит, что нет необходимости вызывать ctx.flu sh (). Но я не нашел, что flush(ChannelHandlerContext ctx) называлось тем, что он сказал.

package io.netty.example.time;

public class TimeEncoder extends ChannelOutboundHandlerAdapter {
    @Override
    public void write(ChannelHandlerContext ctx, Object msg, ChannelPromise promise) {
        UnixTime m = (UnixTime) msg;
        ByteBuf encoded = ctx.alloc().buffer(4);
        encoded.writeInt((int)m.value());
        ctx.write(encoded, promise); // (1)
    }
}

Second, we did not call ctx.flush(). There is a separate handler method void flush(ChannelHandlerContext ctx) which is purposed to override the flush() operation. https://netty.io/wiki/user-guide-for-4.x.html#wiki -h3-8

1 Ответ

2 голосов
/ 21 января 2020

Смысл буферизации в том, что вы «собираете» кучу данных вместе и отправляете их все сразу, потому что отправлять много данных примерно так же быстро, как отправлять небольшое количество данных (потому что IO медленно).

Это 4-байтовый буфер. Если вы сбрасываете каждые 4 байта, это будет не очень эффективно.

Где-то будет грипп sh, но только не в этом конкретном методе.

...