3

Nettyを使用してクライアントにデータをストリーミングするサーバーアプリケーションを開発しています。基本的に、私のアプリケーションにデータを供給するメインサーバーがあり、アプリケーションは登録されたユーザーにデータを配布します。私のアプリケーションは非常に長期間維持する必要があり、Netty3.5.8とNetty4.0.0はAPIの点でかなり異なるため、Netty4.0.0を使用することにしました。

ただし、メインサーバーが大量のデータをフィードすると、クライアントに十分な速度で配信できないという問題が発生します。ヒープメモリの使用量が増えてメモリが不足するため、この問題を防ぐために、データを書き込む前にクライアントのバッファをチェックするようにしています。Webサイト(http://static.netty.io/4.0/xref/io/netty/example/discard/package-summary.html)で破棄の例を使用していますが、ヒープメモリがいっぱいになることがあるため、機能しません。リスナーが呼び出される前。Netty 3.5.8でこの例を見ると、データを書き込む前に実際のバッファーをチェックしていることがわかりました。4.0.0の例とは異なりますので、netty 4.0.0に書き留める前にバッファをチェックする方法はありますか?

前もって感謝します。

4

1 に答える 1

0

同様の問題がありました。私がこれを処理した方法は次のとおりです。

  1. サーバーがデータを書き込むとき、64k 番目のバイトを書き込む呼び出しが同期的に呼び出されます。したがって、データが相手側で消費されるまで、通話はブロックされます。
  2. もう一方の端は、既に消費したデータが処理されて破棄されるまで、データを消費しません。

全体を通して同じパターンに従います。少し遅くなるかもしれませんが、メモリ不足エラーを防ぐことができます。遅さが問題になる場合は、アプリケーション アーキテクチャ (netty の外部) に対処が必要なユース ケースが既に存在するため、問題になることはありません。

于 2013-02-19T22:17:37.460 に答える