2016-04-15 53 views
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回调执行?

  1. 网状移交数据到操作系统后发送缓冲区(或)

  2. 操作系统将数据写入到网络套接字之后。 (或)

  3. 此数据实际上被服务器接收后。

TIA

回答

2
1. After netty hands over the data to the OS send buffers (or) 

监听器将data接到通知后从ChannelOutboundBuffer(网状的发送缓冲区)删除

+0

@loxiu - 所以,如果数据被服务器没有收到通知?如果接收器被阻塞怎么办?我如何检测? – tsar2512

+0

是的,没有通知(或应用程序级确认)。如果接收器被阻塞,那么发送器的os缓冲区将会被填满,然后netty不能发送数据,并且通道的可写会变成错误的。 – louxiu

+0

如果接收缓慢或阻塞,通常会阻止来自发送方的Tcp发送(减速)。这会影响netty的发送吗?或者,尽可能快地发送数据后,频道是否变得不可写入? – tsar2512

相关问题