私はNettyサーバーを持っています。最初のハンドラーのReadTimeoutHandler
後に、ビジネス ロジック ハンドラーと応答ライター ハンドラーが続きます。タイムアウトが 20 秒に設定されているとします。タイムアウトが発生するたびに、応答ライター ハンドラーで次の 3 つのことを行いますexceptionCaught()
。
クライアントへの返信を書く
ビジネスロジックが開始した他のいくつかのスレッドを閉じます
チャンネルを閉じる
最も重要な問題は、読み取りタイムアウトが正しい時間にクライアントに伝達される必要があることです。
質問1
3だけを実行すると、クライアントは 20 秒後にタイムアウトを正しく認識します。ただし、1と3の両方を行う場合、つまり、チャネルを閉じる前に応答を書き込もうとすると、ビジネス ロジック スレッドが終了した後にタイムアウト メッセージが出力され、40 秒かかる場合があります。ここでどこが間違っているのですか?
channel.write(....).addListener(ChannelFutureListener.CLOSE)
対。
channel.close()
質問2
ビジネス ロジック ハンドラーではなく、その後のハンドラーで例外をキャッチしていることを考慮して、タイムアウトがある場合にビジネス ロジック スレッドを強制的に終了するにはどうすればよいですか。