2011-12-07 11 views
4

要求を十分に高速に処理できないサードパーティのサーバーに接続するOutMemoryErrorを実行する。Nettyクライアント限定キュー破棄ポリシー

NioClientSocketChannelFoundoryは、バインドされたキューでExecutorサービスに渡され、ポリシー(ThreadPoolExecutor.DiscardPolicy)を破棄してもOutOfMemoryErrorが残っています。

私には何が欠けていますか?

おかげ

答えて

9

あなたのクライアント側ネッティーチャンネルの書き込みバッファがいっぱいになると、サーバーが十分にそれが速読されていない場合は、クライアント側でOutOfMemoryErrorが表示されます。それを避けるには、Channel.isWritable()falseを返す場合には、書面を停止する必要があります。 Channel.writable' changes. Then, you can check again if Channel.isWritable()returns trueのステータスのときにchannelInterestOpsChangedイベントで通知され、書き込みが続行されます。

保留中のデータを破棄しても問題がなければ、Channel.isWritable()falseを返す場合は、Channel.write()に電話しないでください。

Channel.writableのプロパティが変更され、透かしプロパティがNioSocketChannelConfigで提供されるように設定できます。また、このテクニックを使用する「破棄」の例を見てください。

+0

私はあなたにお知らせしようとします。 – user432024

+0

働いたようです。ところで、私は境界のあるワーカープールを使用して気にする必要がありますか、またはサンプルを使用してキャッシュされたものを使用するだけですか? ありがとう – user432024

+0

ワーカープールはキャッシュされている必要があります。 – trustin

関連する問題