2012-03-13 8 views
1

Delphi On Railsを使用するアプリケーションがあり、HTTP、JSON、Webソケットを使用してクライアントとして通信し、サーバとして機能します。最近いくつかの問題に遭遇しましたが、デバッグして問題の原因を見つけるのは難しいです。一部のHTTPリクエストで奇妙なTCPリセット(RST)

トラフィック分析にWiresharkを使用すると、次のような動作が発生する可能性があります。クライアントからのリクエスト(HTTP GETファイル)。通常は、そのリクエストを処理し、HTTPステータスコード、ファイル(キャッシュされていない場合)などを送信します。ただし、クライアントからの要求は 、サーバーからのTCP SYNのみですが、その後は再現可能な問題があります。サーバーはRSTパケットを送信し、TCP通信は停止します。

奇妙なことがある(RSTパケットは、通信が中断されたファイルは異なるが)、私たちは非常によく問題を再現することができ、それが神秘的に次のいずれかの場合に消滅:

  • デバッグ環境では( DelphiのIDE)、madExceptPatch
  • メインアプリケーションウィンドウとは別のウィンドウにフォーカスを与えると実行可能ファイルをパッチ適用ではない、リリース環境でmadExcept
  • を無効にします。

我々は、DelphiでのRailsでいくつかの問題を抱えていたし、アクセス違反とデバッグ例外を回避するために、それに若干の変更をしなければならなかったように、私はあることをDORが犯人といくつかの奇妙なメモリ破損またはuncatched例外であることを疑いますバグですが、それはまだ混乱しています。特に焦点を変えれば、問題はなくなります。

私の主な質問は、この問題を解決する方法ではなく、デバッグする方法と問題を探す場所です。その場合、私たちはthe usual procedures that process requestsに入っていないので、DORや他の何か(アプリケーション、Winsock、OS)のように思われます。誤って接続をリセットします。 Issue #6Issue #7Issue #8forum entry:それは関連するかもしれないよう

は完全を期すために、ここで私は、DelphiでのRailsプロジェクトと私は問題についてmadExceptの作者を尋ねたフォーラムのスレッドで報告された問題です。

+0

これが役立つかどうかわかりませんが、Windowsでは、受け入れられていない接続のバックログが大きいリスニングソケットに接続がリセットされます。 「大きなバックログ」は特に明確に定義されていないが、妥当な数であると考えられている。 – cha0site

+0

システムの問題、特に "変更されたフォーカス"について話しているときに、おそらくserverfaultに尋ねてみてください。 – pmod

答えて

1

テストとして、接続の問題が判明していないバージョンコントロールからいくつかの古いDORソースをチェックアウトし、上記の問題を表示せずに動作します。

私たちは、DOR固有のソースコード(約20ファイル)を最後の安定バージョンにロールバックし、エラーが再び発生するまでピース単位で「再更新」しました。この問題が発生した場合、我々は、ライブラリの更新に反応することができますので、我々は戻って、最新の作業バージョンに

  1. ゴー迅速
  2. がうまくいけば、元のDOR源に非常に近いことができます。
  3. 発生したエラーを分析し、詳細な問題(およびおそらく解決策)をDORプロジェクトに報告します。

編集:接続の問題を起こすことなく、1つを除くすべてのファイルを古い状態に戻すことができるようになりました。問題を引き起こすファイルはdorSynchronizer.pasです。より正確には、このファイルのr179が問題を引き起こしました。スレッドがWindows APIからDelphi TThreadに変更されました。これをさらに調査し、次の日にDORプロジェクトに問題を追加する可能性があります。

EDIT2:DORは、未定義の動作を引き起こす可能性のある廃止予定のTThread.SuspendおよびTThread.Resumeプロシージャを使用することが判明しました。私はan issueをDORプロジェクトに報告しました。

関連する問題