1

LineReceiverプロトコルを使用してTwistedサーバーを実行しています。クライアントがサイレントに切断することがあるため、Twistedは接続を開いたままにします。また、サーバーは要求されない限り何も送信しないため、TCPタイムアウトは発生しません。つまり、一部の接続はサーバー側で閉じられることはありません。

数時間非アクティブになっている接続をTwistedで閉じるにはどうすればよいですか?

4

1 に答える 1

2

を使用して、時間指定イベントをスケジュールできますreactor.callLater。これに基づいて、プロトコルにタイムアウトを追加するためのヘルパーがありますtwisted.protocols.policies.TimeoutMixin

setTcpKeepAliveもう1つのアプローチは、TCPキープアライブを使用することです。これは、トランスポートのメソッドを使用して有効にできます。

また、別のアプローチは、アプリケーションレベルのキープアライブを使用することです。基本的に、時々「noop」を送信します。応答は必要ありません。接続が失われた場合、送信バッファ内の余分なデータにより、TCPスタックが最終的に通知します。

FAQエントリも参照してください。

于 2012-08-11T11:08:48.140 に答える