1

現在、Netty クライアントとして Android を使用しています。そして Windows を Netty サーバーとして。最近、Netty で奇妙な動作を見つけました。サーバー側アプリを開くと、メモリは 30MB しかありません。しかし、数時間後には 300M まで上昇します。元のメモリ使用量と比較して 10 倍です。サーバーを開く時間が長いほど、メモリが増加します。

なぜこれが起こっているのかわかりません。それは正常ですか?

ちなみに、Netty は組み込みのサーバー プッシュ機能をサポートしていないためです。そこで、静的メソッドを使用してすべてのチャネルをマップに格納します。

public static final Map<Integer, Channel> mapConcurrentIdChannel = new ConcurrentHashMap<Integer, Channel>();

チャネル ID を Channel にマップします。例: クライアント A がクライアント B にメッセージをプッシュするときはいつでも、サーバーはチャネル ID を見つけて Channel インスタンスを取得し、次に Channel.write(object) メソッドを使用します。これは、Netty でプッシュ メッセージ機能を実装する正しい方法ですか? (そうでない場合は、Push 機能を実装するための良い方法を提案してもらえますか? 公式ドキュメントに言及されていないため) また、この実装により、先ほど説明した「メモリ リークの問題」が発生する可能性があります。

ChannelGroup の使用について:
私のシナリオは、A、B、C、D、E の 5 人がいる場合です。A が C にメッセージを送信したい場合もあれば、B が E にメッセージを送信したい場合もあります。誰かにメッセージを送信し、送信先を指定します。そのため、5 人すべて (接続) を ChannelGroup に追加することはできません。そのグループに書き込むと、全員にメッセージがブロードキャストされます。

Google で長い間検索してきましたが、現在直面している問題を解決するものは何もありません。Netty の経験豊富な開発者からの推奨事項を聞きたいです。

ありがとう!!

4

1 に答える 1