2010-04-17 2 views
1

클라이언트는 2 개의 동시 요청을 작성합니다. (1은 60 초가 걸린다 - 긴 폴링). 그리고 긴 폴링이 아닌 다른 하나는 즉시 돌아 오기로되어있다. 나는 긴 폴링을하지 않을 때 즉시 돌아온다. 그러나 다른 스레드로 긴 폴링을 시작하자 마자 다른 스레드는 영원히 실행됩니다.긴 폴링을 할 때 내 다른 요청이 왜 그렇게 오래 걸릴까요?

방화 광은 요청이 10-50 초 동안 대기 중임을 나타냅니다. 서버에서 PHP 스크립트가 시작될 때까지 모든 요청을 프로파일 링하여 클라이언트로 되돌려 보내고 각 요청은 300ms 이하 만 소요되었음을 보여줍니다.

이 문제는 (다른 XHR 요청과 함께) 긴 폴링을 시작한 것과 거의 같은시기에 시작되었습니다. 두 요청에 대해 jquery를 사용하고 있습니다.

서버가 매우 가벼운 것으로 나타납니다. CPU와 메모리가 2 % 미만입니다. 8 개의 프로세스가 15 개의 풀에서 실행 중입니다. (더 많은 Ajax 요청을 실행하는 경우에도 8에서 벗어나는 것처럼 보이지 않습니다.) 나는 각 프로세스가 동시에 여러 아약스 스레드를 실행할 수 있다고 생각한다.

모든 작업이 끝나면 모든 프로세스에서 종료해야합니다. prstat -J 아래에 나열된 7 개의 사용되지 않는 프로세스가 여전히있는 경우 프로세스 풀이 어떻게 소모되었는지는 알 수 없습니다. 또한 문제는 다소 간헐적으로 발생합니다. Firefox는 2 개의 동시 ajax 요청을 처리 할 수 ​​있어야합니다. 나는 그 문제가 무엇인지 알지 못한다.

+0

프로그래밍 질문을 할 때 코드를 보는 것이 좋다고 생각합니다. – XGreen

+0

setTimeout (longpoll, 100)에서 긴 폴링을 실행하면 어떻게됩니까? – mVChr

답변

1

파이어 폭스와 두 번의 jsonp 요청에 동일한 문제가있었습니다. 하나는 긴 폴링입니다. 문제는 jsonp가 기본적으로 자바 스크립트를 가져 오는 스크립트 태그이고 Firefox는 동적으로 삽입 된 스크립트를 동 기적으로로드한다는 것입니다.

그런 이유로 긴 폴링 요청은 두 번째 것이로드되기 전에 완료되어야합니다.

귀하의 사례가 jsonp이 아닌 경우 어떤 도움도 드릴 수 없습니다.