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