2009-08-30 9 views
2

나는 긴 XMLHttpRequest 설문 조사를 통해 프레임 워크에 대해 Comet support을 작업 중입니다. 대부분의 경우 서버로부터의 응답이 제공되기 전에 클라이언트에 의해 이러한 요청이 닫힙니다. 예를 들어 페이지가 닫히고 사용자가 다른 페이지로 이동하거나 다시 페이지가 다시 전달되는 경우입니다.클라이언트가 연결을 끊었을 때 HTTP 프록시/FastCGI/SCGI가 연결을 닫지 않습니다 - 버그 또는 기능?

서버 측에서는 연결이 끊어 졌다는 알림을 받게 될 것으로 예상됩니다. FastCGI, SCGI 및 간단한 HTTP 프록시와 같은 3 개의 커넥터를 통해 응용 프로그램을 테스트했습니다.

3 개의 주요 UNIX 웹 서버 인 Apache2, lighttpd 및 Nginx에서 마지막 응용 프로그램 만이 연결을 예상대로 닫지 않아 대기열에서 요청을 제거 할 수있었습니다. 이는 FastCGI 및 HTTP 프록시 커넥터 모두에서 작동했습니다. (Nginx에는 기본적으로 scgi 모듈이 없습니다).

기타 Apache 및 Lighttpd는 연결이 끊어 지거나 연결이 끊어지지 않은 경우 백엔드에 알리지 않고 클라이언트가 계속 온라인 상태 인 것처럼 진행합니다. 이는 FastCGI, SCGI 및 HTTP 프록시와 같이 지원되는 3 가지 API 모두에서 발생합니다.

나는 Lighttpd에 대한 문제를 열었다하지만, 나 사실은 무엇을 더 conserns입니다 아파치 - 성숙하고 잘 지원 웹 서버 lighttpd를 로와 클라이언트가 갔던 서버 백엔드를 개시하지 않습니다.

질문 :

  1. 이 버그인가, 아니면이 특징이다? 웹 서버와 응용 프로그램 백엔드 사이의 연결을 닫지 않을 이유가 있습니까?
  2. FastCGI/SCGI/HTTP-Proxy 백엔드를 통해 이러한 서버에서 작동하는 실제 Comet 응용 프로그램이 있습니까?
  3. 위의 내용이 사실이라면 어떻게이 문제를 해결할 수 있습니까? 10 초마다 모든 연결을 시간 초과 할 수 있음을 이해합니다. 그러나 클라이언트가 청취하는 한 유휴 상태로 유지하고 싶습니다. 이는 더 쉬운 확장을 허용하기 때문에 각 연결은 매우 능숙합니다. 비용은 보류 된 소켓에 불과합니다.

고마워요!

+0

, 만 5 개 태그 최대가 될 수 있습니다

이 페이지의 두 번째 패치는 특정 문제를 해결해야한다 새로운 'cppcms'태그를 사용하여 기존 태그 5 개 중 어느 태그를 삭제할 수 있는지 결정하십시오. cppcms에 직접 영향을 줄 수있는 SO 질문을하는 것이 좋을 것입니다. +1. – augustin

답변

4

(1) 기능. 또는 구체적으로 구현 세부 사항에서 파생됩니다.

TCP/IP 연결에는 일정한 트래픽 흐름이 필요하지 않습니다. 따라서 클라이언트가 (a) 클라이언트가 연결을 종료한다고 알리거나 (b) 시간 초과없이 클라이언트가 사라 졌다는 것을 알 수있는 방법이 없습니다.

(2) 저는 Comet 또는 CppCMS에 대해 잘 알고 있지 않습니다. 그러나 예, 언급 된 웹 서버 뒤에서 실행되는 모든 종류의 CMS 서버가 있으며이 모든 문제를 처리해야합니다 (그렇습니다, 그것은 고통입니다).

(3) 타임 아웃 만이 유일한 방법이지만 고통을 덜어 줄 수 있습니다. 그렇지 않으면 활동이 없을 때 클라이언트가 연결을 통해 N 초마다 서버에 ping을 수행하게하십시오.아무것도하지 않아도되며 답장에 물건을 집어 넣을 수 있습니다. 동시 편집 내용에 대한 알림 또는 필요한 항목.

mod_fastcgi가 아파치가 연결을 감지했거나 연결 시간이 초과되었다는 것을 백엔드에 알리는 것이 놀랍습니다. 그리고 당신은 당황한 첫 번째 사람이 아닙니다. 나는 ... 거기에 cppcms 태그이 있다면 그것은 멋진 것

http://osdir.com/ml/web.fastcgi.devel/2006-02/msg00015.html

+0

클라이언트가 연결을 종료하지 않으면 디스코가 발생했는지 알 수 없다는 것을 알고 있습니다. 일반적으로 웹 브라우저가이를 수행합니다. 패치 링크를 보내 주셔서 감사합니다 ... 답변을 수락합니다. ;) – Artyom

0

http://ncannasse.fr/blog/tora_comet

나는 당신을 위해 어떤 구체적인 정보를 가지고 있지 않지만,이 문서는 클라이언트가 아파치로부터 절단 된 때 감지 할 수 언급 않습니다. tora.Queue을 참조하십시오. 그리고 소스가 neko CVS에서 사용할 수있는 것처럼 들리므로, 거기에서 몇 가지 단서를 찾을 수있을 것입니다. 행운을 빕니다.

관련 문제