2016-04-15 52 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

相關問題