一部のデータを生成し、サブスクライブしたクライアントにブロードキャストする Netty サーバー (3.6.2) があります。クライアントが故障しているか、ネットワーク リソースの状態が悪いために、一部のクライアントがデータを取得していないように見えることがあります。この場合、サーバーはチャネル書き込みキューをいっぱいにしてイベントを生成し続け、最終的に OutOfMemoryError につながる可能性があります。
1 つの解決策は、書き込む前にチャネルが isWritable() かどうかを確認し、負の場合は書き込まないことです (とにかく、このメッセージを保存する必要があります。そうしないと、メッセージが失われます)。しかし、しばらくの間、またはブロードキャストイベントを生成しているペースで書き込みバッファーをフラッシュしていないクライアントを切断したいと思います。
どうすればそれができますか?この書き込みバッファがフラッシュされない「タイムアウト」をどのように実装できますか? isWritable が false の場合、クライアントを閉じる必要がありますか?
アイデアをいただければ幸いです。
ありがとうございました。