2012-03-13 4 views
1

우리는 Delphi On Rails을 사용하는 서버에서 작동하고 HTTP, JSON 및 웹 소켓을 사용하여 클라이언트와 통신하는 응용 프로그램을 델파이로 작성했습니다. 최근 몇 가지 문제가 발생했으며 문제를 디버깅하고 문제의 원인을 찾기가 어렵습니다.일부 HTTP 요청의 이상한 TCP 재설정 (RST)

트래픽 분석에 Wireshark를 사용하면 다음과 같은 동작을 볼 수 있습니다. 클라이언트로부터 요청이 있습니다 (HTTP GET 파일). 일반적으로 우리는 요청을 처리하고 HTTP 상태 코드, 파일 (캐시되지 않은 경우) 등을 보냅니다. 그러나 클라이언트의 요청 (서버의 TCP SYN)이 인 경우 재현성 문제가 발생하지만 그 이후에는 서버가 RST 패킷을 보내고 TCP 통신이 중지됩니다. (디버그 환경에서

  • :

    이상한 것은합니다 (RST 패킷 통신을 방해 파일이 다를 수 있지만) 우리는 아주 잘 문제를 재현 할 수이며 신비 다음과 같은 경우 중 하나에 사라진다 메인 애플리케이션 창 이외의 다른 창으로 madExceptPatch와

  • 가지 적어 포커스를 실행 파일을 패치하지, 릴리스 환경에서
  • madExcept을 해제 델파이 IDE). 우리는 레일에 델파이와 함께 몇 가지 문제가 있었다 액세스 위반 및 디버그 예외를 방지하기 위해 여기에 약간의 수정을 할 수 없었

, 나는 DOR이 될 수있는 원인과 이상한 메모리 손상 또는 uncatched 예외로 의심 버그,하지만 여전히 혼란 스럽습니다. 특히 초점을 바꾼다면 문제가 사라질 수 있습니다.

내 주요 질문은이 문제를 해결하는 방법이 아니라 디버깅하는 방법과 문제를 찾을 위치입니다. TCP 리셋의 원인은 나를 괴롭 히며, 우리는 the usual procedures that process requests을 실행하지 않고 DOR이나 다른 것 (애플리케이션, Winsock, OS)이 실수로 연결을 재설정하는 것처럼 보입니다. Issue #6, Issue #7, Issue #8, forum entry : 그것과 관련이있을 수도로

완성도를 들어, 여기에 내가 델파이에 레일 프로젝트와 나는이 문제에 대해 madExcept 저자에게 물었다 포럼 스레드에보고 된 문제입니다.

+0

이 방법이 도움이되는지 확신 할 수 없지만 Windows는 'accept()'하지 않은 연결 시도가 많은 대기중인 소켓으로 연결을 재설정합니다. "큰 백 로그"가 특히 잘 정의되지는 않았지만 합리적인 숫자로 간주됩니다. – cha0site

+0

시스템 문제 일 수 있습니다. 특히 "변경된 포커스"에 대해 이야기 할 때 serverfault에 대한 질문을 시도해보십시오. – pmod

답변

1

테스트에서 이전에 알려진 문제가없는 버전 제어에서 이전 DOR 소스를 확인하고 작동합니다.

그래서 우리는 DOR 특정 소스 코드 (약 20 개 파일)를 마지막 안정 버전으로 롤백하고 오류가 다시 발생할 때까지 조각별로 "다시 업데이트"하기로 결정했습니다. 이 경우, 우리는

  1. 우리가 라이브러리에 대한 업데이트에 반응 할 수 있도록 신속하게
  2. 이 희망 원래 DOR 소스에 매우 가까이 다시 최신 작업 버전으로 갈 수 있습니다.
  3. 발생하는 오류를 분석하고 DOR 프로젝트에 세부적인 문제 (솔루션 일 수도 있음)를보고하십시오.

편집 : 이제는 연결 문제없이 이전 파일을 제외한 모든 파일을 다시 업데이트 할 수 있습니다. 문제를 만드는 파일은 dorSynchronizer.pas입니다.이 파일의 r179이 문제를 일으켰습니다. 스레드가 Windows API에서 Delphi TThread로 변경되었습니다.우리는 이것을 더 자세히 조사하고 다음 날 DOR 프로젝트에 문제를 추가 할 것입니다.

EDIT2 : DOR은 사용되지 않는 TThread.Suspend 및 TThread.Resume 프로 시저를 사용하므로 정의되지 않은 동작이 발생할 수 있습니다. 나는 DOR 프로젝트에 an issue를보고했다.

관련 문제