2016-04-15 5 views
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へのデータの上に網状の手の後

  1. OSは、ネットワークソケットにデータを書き込みした後のバッファ(または)

  2. を送ります。 (または)

  3. このデータが実際にサーバーによって受信された後。

TIA

答えて

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

リスナーはdata後に通知されますChannelOutboundBufferから削除(ネッティーの送信バッファ)

+0

@loxiuされる - ので、データがサーバによって受信された場合に通知されませんか?受信機がブロックされている場合はどうなりますか?どうすればそれを検出できますか? – tsar2512

+0

はい、通知(またはアプリケーションレベルの確認)はありません。レシーバがブロックされている場合、送信者のバッファはいっぱいになり、ネットはデータを送信できなくなり、チャネルの書き込み可能なメモリは偽になります。 – louxiu

+0

レシーバが遅いかブロックされている場合、送信者から送信されたTcp送信は一般に抑制されます(遅くなります)。この影響ネッテイも送信されますか?または、チャネルは、できるだけ早くデータを送信した後、単に書き込み不可能になるのでしょうか? – tsar2512

関連する問題