2012-04-12 15 views
2

私はNettyチャンネルで作業していますが、チャンネル全体で多くのデータを送信すると、Channel.channelInterestChangedイベントが発生し、すぐにChannel.isWritable()という結果が返されます(Channel.write()このスレッドはすぐに失敗します)。私の質問は、チャンネルの興味が変わる理由は何ですか?それとも誰が​​それを変えているのだろうか?私が書いたコード(サーバーまたはクライアント)は、関心を変えません。Channel.channelInterestChanged in Netty

答えて

3

チャンネルにさらにデータを書き込んだ後、一定の時間内に送信できるので変更されます。 Nettyは、ある閾値がヒットするまでデータをキューに入れます。ヒットしたら、Channel.isWritable()はfalseを返します。

Channel.isWritable()がfalseを返す前に、キューに入れられる/バッファに入れられるバイト数を変更するには、writeBufferHighWaterMarkとwriteBufferLowWaterMarkを調整する必要があります。

ServerBootstrap sb = .... 
sb.setOption("writeBufferHighWaterMark", ..); 
sb.setOption("writeBufferLowWaterMark", ..); 

とにかくあなたはChannel.write(...)を呼び出すコードがChannel.isWritable()をチェックし、唯一それがtrueを返す場合に書き込みないことを確認してください。あなたが持っている問題は、低速ネットワークでよく見られます。

[1] http://netty.io/docs/stable/api/org/jboss/netty/channel/socket/nio/NioChannelConfig.html

+0

私たちは何をすればよいですか? – WorM

+0

書き込みをやめてもう一度書き込み可能にしたら続ける –

+0

には、nettyを使用してリモートでウィンドウ枠のサイズの変化を検出する方法がありますか?もしあれば、これに対応するためにアプリケーションレベルで何かできるのでしょうか? – WorM