LineReceiverプロトコルを使用してTwistedサーバーを実行しています。クライアントがサイレントに切断することがあるため、Twistedは接続を開いたままにします。また、サーバーは要求されない限り何も送信しないため、TCPタイムアウトは発生しません。つまり、一部の接続はサーバー側で閉じられることはありません。
数時間非アクティブになっている接続をTwistedで閉じるにはどうすればよいですか?
を使用して、時間指定イベントをスケジュールできますreactor.callLater
。これに基づいて、プロトコルにタイムアウトを追加するためのヘルパーがありますtwisted.protocols.policies.TimeoutMixin
。
setTcpKeepAlive
もう1つのアプローチは、TCPキープアライブを使用することです。これは、トランスポートのメソッドを使用して有効にできます。
また、別のアプローチは、アプリケーションレベルのキープアライブを使用することです。基本的に、時々「noop」を送信します。応答は必要ありません。接続が失われた場合、送信バッファ内の余分なデータにより、TCPスタックが最終的に通知します。
FAQエントリも参照してください。