我是Netty的新手,我不会理解其中的很多东西。这是我觉得特别困惑的事情。
Channel.writeAndFlush是异步的:它应该在I / O操作完成之前立即返回。但是,在下面的代码中,监听器中的日志语句("写操作完成")总是在调用writeAndFlush之后的日志语句之前执行("从writeAndFlush"返回)。
好的,没关系:I / O很快,并且调用了侦听器。但是,两个日志语句总是在同一个线程上执行。
所以在我看来,当我调用writeAndFlush时,该线程必须等待I / O完成,然后它才会调用侦听器。但是如果该方法应该是异步的呢?
private static class LoggingListener implements ChannelFutureListener {
public void operationComplete(ChannelFuture future) {
logger.debug("Write operation complete");
}
}
public void writeAndFlush(Object object) {
Channel channel = getChannel();
ChannelPromise promise = channel.newPromise();
promise.addListener(new LoggingListener());
channel.writeAndFlush(object, promise);
logger.debug("Returned from writeAndFlush");
}
答案 0 :(得分:0)
频道会将所有工作调度到与public class Gardener{
public void garden(){
System.out.println("gardening");
}
}
绑定的EventLoop
,因此Thread
本身将由不同的writeAndFlush
执行,然后是您的调用线程如果你没有从Thread
线程本身调用它。
如果您从EventLoop
线程中调用writeAndFlush
,它将直接执行,并且一旦完成后将会通知未来,可能是直接或稍后。