2

一部のデータを生成し、サブスクライブしたクライアントにブロードキャストする Netty サーバー (3.6.2) があります。クライアントが故障しているか、ネットワーク リソースの状態が悪いために、一部のクライアントがデータを取得していないように見えることがあります。この場合、サーバーはチャネル書き込みキューをいっぱいにしてイベントを生成し続け、最終的に OutOfMemoryError につながる可能性があります。

1 つの解決策は、書き込む前にチャネルが isWritable() かどうかを確認し、負の場合は書き込まないことです (とにかく、このメッセージを保存する必要があります。そうしないと、メッセージが失われます)。しかし、しばらくの間、またはブロードキャストイベントを生成しているペースで書き込みバッファーをフラッシュしていないクライアントを切断したいと思います。

どうすればそれができますか?この書き込みバッファがフラッシュされない「タイムアウト」をどのように実装できますか? isWritable が false の場合、クライアントを閉じる必要がありますか?

アイデアをいただければ幸いです。

ありがとうございました。

4

1 に答える 1

0

Channel.isWritable() が false を返す場合、接続を閉じることができます。

于 2013-01-22T16:52:43.013 に答える