3

私はアドバンテージ データベースで動作し、時々 http 呼び出しを行う Windows サービスを持っています。まれに、これらの通話が非常に長くなることがあります。私のデータベース接続がタイムアウトするという曲に。私はデータモジュールなどを使用していません。接続を手動で作成するだけです。

私の主な質問は、しばらく使用していない場合、通常、接続がタイムアウトするのを防ぐのは何ですか? TAdsComponents はバックグラウンドで呼び出されるキープアライブ メッセージを送信しますか? それは vcl に依存しているので、私のサービスにはありませんか? どういうわけか、http 呼び出しを行うためのスレッドを作成するような気がします。メイン スレッドでは、数秒ごとにスレッドが終了することを確認することで、接続が切断されるのを防ぐことができます。それは本当ですか?

4

1 に答える 1

6

はい、期待どおりのキープアライブ メカニズムがあります。クライアント (すべての通信タイプ、TCP、UDP、共有メモリ) は、サーバーに「ping」を頻繁に送信して、接続がまだ有効であることをサーバーに知らせます。そのキープアライブ ping の頻度は、サーバー構成パラメーター CLIENT_TIMEOUT に基づいています。デフォルト設定では、キープアライブ ping が 30 秒ごとに送信されると思います。

キープアライブ ロジックは、通信を処理するコードによって開始される別のスレッドで実行されます。つまり、どの VCL コンポーネントにも依存しません。サーバーに接続している場合は、そのスレッドが実行されているはずです。

接続がタイムアウトしているかどうかを確認する 1 つの方法は、Advantage エラー ログを調べることです。タイムアウトした接続に対応する 7020 エラーが発生するはずです。

接続がタイムアウトになる原因として考えられるのは、次のようなものです。

  • なんらかの理由でクライアント プロセスが中断されたため、キープアライブ スレッドを実行できませんでした。これはありそうもない。
  • キープアライブ スレッドが何らかの理由で強制終了されました。これもありそうにないようです。これを実現するには、あらゆる手段を講じる必要があります。
  • 一定時間アクティビティがない場合、ファイアウォールが接続を閉じる場合があります。ただし、それを防ぐには30秒の間隔で十分だと思います。
  • ファイアウォールが UDP キープアライブ パケットを許可しない場合があります。ファイアウォールは、本質的に、UDP パケットに対して「疑わしい」ものです。TCP/IP を使用していることを確認してください。
于 2013-02-08T19:38:04.070 に答える