2016-05-14 20 views
2

クライアントがACKを正しく読み込めないときにriemannサーバのOOMEを防ぐために、クライアントがパケットをすばやく読み込み/ ACKすることが原因であると仮定して、書き込みが不可能になったときにチャネルを閉じるためにsome logicを実装しました。低速クライアントでNettyサーバーを抑制する方法は?

しかし、これは、おそらくサーバーがTCP経由で送信できるよりも速く結果を書き込もうとしているため、大きなishクエリ結果を送信するときにチャネルを閉じます。私の頭の上から、この状況を処理する最善の方法は、WriteTimeoutHandlerを使用して、書面でタイムアウトを設定することだと思います。

このケースを処理するために、nettyには既知の標準パターンがありますか?

+0

この質問のように見えます:http://stackoverflow.com/questions/28862613/throttling-websockets-with-netty-socketio-server – insitu

答えて

1

基本的には、Channel.isWritable()がfalseを返し、再び真を返すと再び書き込みを開始します。 ChannelInboundHandler.channelWritabilityChanged(...)を無効にすることで、これを更新して通知することができます。

+0

提案していただきありがとうございます、これは私が心に持っていたものですが、これはかなり複雑ですこの特定のケースでは、どのような種類の回答が書かれていないかを知るためにいくつかのロジックを処理する必要があるためです。出力バッファ内の応答を破棄する方法はありますか?結局、私は何をしたいのかという現実的な解決策がないのではないかと恐れています... – insitu

関連する問題