2

私は Netty Channels を使用していますが、チャネルを介して大量のデータを送信すると、Channel.channelInterestChangedイベントが発生し、すぐにChannel.isWritable()false が返されることに気付きます (別のスレッドが aを実行してChannel.write()おり、このスレッドはすぐに失敗します)。私の質問は、チャンネルの関心が変わったのはなぜですか? むしろ誰がそれを変更していますか?私が書いたコード (サーバーまたはクライアント) には、興味を変更するものは何もありません。

4

1 に答える 1

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

于 2012-04-13T06:00:32.387 に答える