gpt4 book ai didi

java - 为什么在 Netty 用户指南中调用 ctx.write() 后没有调用 ctx.flush() ?

转载 作者:行者123 更新时间:2023-12-02 01:07:19 26 4
gpt4 key购买 nike

netty Java文档中说所以一旦你想要请求刷新就一定要调用flush(),但是在这个例子中它说没有需要调用ctx.flush()。但我没有发现 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)
}
}

其次,我们没有调用 ctx.flush()。有一个单独的处理程序方法 voidlush(ChannelHandlerContext ctx) ,其目的是覆盖flush()操作。 https://netty.io/wiki/user-guide-for-4.x.html#wiki-h3-8

最佳答案

缓冲的要点在于,您将一堆数据“收集”在一起并一次性发送,因为发送大量数据与发送少量数据的速度大致相同(因为 IO 是慢)。

这是分配一个 4 字节缓冲区。如果每 4 个字节刷新一次,效率不会很高。

在某个地方会有刷新,只是不在这个特定的方法中。

关于java - 为什么在 Netty 用户指南中调用 ctx.write() 后没有调用 ctx.flush() ?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/59843899/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com