在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/