4
我是netty的新手,并试图了解writeAndFlush的通道未来如何工作。考虑在netty客户端上运行以下代码:Netty:writeAndFlush通道未来侦听器回调何时执行?
final ChannelFuture writeFuture = abacaChannel.writeAndFlush("Test");
writeFuture.addListener(new ChannelFutureListener() {
@Override
public void operationComplete(ChannelFuture future) throws Exception {
if (writeFuture.isSuccess()) {
LOGGER.debug("Write successful");
} else {
LOGGER.error("Error writing message to Abaca host");
}
}
});
什么时候这个writeFuture operationComplete回调执行?
网状移交数据到操作系统后发送缓冲区(或)
操作系统将数据写入到网络套接字之后。 (或)
此数据实际上被服务器接收后。
TIA
@loxiu - 所以,如果数据被服务器没有收到通知?如果接收器被阻塞怎么办?我如何检测? – tsar2512
是的,没有通知(或应用程序级确认)。如果接收器被阻塞,那么发送器的os缓冲区将会被填满,然后netty不能发送数据,并且通道的可写会变成错误的。 – louxiu
如果接收缓慢或阻塞,通常会阻止来自发送方的Tcp发送(减速)。这会影响netty的发送吗?或者,尽可能快地发送数据后,频道是否变得不可写入? – tsar2512