4
私はnettyに新しく、writeAndFlushの将来のチャネルがどのように機能するかを理解しようとしています。次のコードをネットクライアントで実行しているとします。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コールバックはいつ実行されますか? OSへのデータの上に網状の手の後
OSは、ネットワークソケットにデータを書き込みした後のバッファ(または)
を送ります。 (または)
このデータが実際にサーバーによって受信された後。
TIA
@loxiuされる - ので、データがサーバによって受信された場合に通知されませんか?受信機がブロックされている場合はどうなりますか?どうすればそれを検出できますか? – tsar2512
はい、通知(またはアプリケーションレベルの確認)はありません。レシーバがブロックされている場合、送信者のバッファはいっぱいになり、ネットはデータを送信できなくなり、チャネルの書き込み可能なメモリは偽になります。 – louxiu
レシーバが遅いかブロックされている場合、送信者から送信されたTcp送信は一般に抑制されます(遅くなります)。この影響ネッテイも送信されますか?または、チャネルは、できるだけ早くデータを送信した後、単に書き込み不可能になるのでしょうか? – tsar2512