2012-03-16 3 views
8

잘 설명 할 수 있기를 바랍니다. 나는 객체 지향 방식으로 PHP library to handle ajax requests through PHP을 만들고 있습니다. 나는 현재 긴 폴링 솔루션을 구현하는 좋은 방법을 숙고하고 있지만 무엇인가 궁금하다.아파치에서 PHP로 긴 폴링

아파치는 다중 연결을 잘 유지하지 못합니다. 요청 당 스레드 모델은 Apache를 긴 폴링에 대해 비효율적으로 만듭니다. nginx와 lighttpd 같은 서버를 사용하면 라이브러리에서이 스레드를 훨씬 잘 처리 할 수 ​​있으므로 단일 함수 호출에서 사용 가능한 특정 서버에 최적화 된 다른 기능을 구현할 계획입니다. 아파치의 경우, PHP 애플리케이션의 엄청난 시장 점유율을 차지하기 때문에 더 나은 솔루션이 필요합니다.

들어오는 요청을 보류/일시 중지 상태로두고 다시 활성화 할 준비가 될 때까지 다른 요청을 처리하는 방법이 있습니까?

나는 그 말이 맞는지 또는 내가 올바른 길을 가고 있는지 확실하지 않습니다. SO가 Apache 서버에서 PHP로 긴 폴링을 권장 할 때 가능한 해결책은 무엇입니까?

+0

왜 서버에서 처리를 일시 중지 하시겠습니까? 귀하의 사용자가 많이 기다리게하지 않겠습니까? – Joseph

+0

Apache에서는 요청 당 스레드 모델을 사용하므로 응용 프로그램의 초기 페이지 요청에서 스레드를 사용하고 ajax 요청 (DOM로드 후 호출 됨)은 별도의 스레드를 사용합니다. 문제는 대량 트래픽이 수천 개의 스레드를 생성하고 궁극적으로 서버를 사용하지 않도록 설정하는 것입니다. –

+0

아약스/PHP 긴 폴링 페이지로드를 무작위로 (cca 모든 4-5로드) 너무 많은 시간이 걸리는 시작한 후 비슷한 문제가있었습니다 ... 현재 및주의 경우에만 PHP에서 sleep() 의해 해결 된 어떤 식 으로든, 그리고 timewait 기능을 javascript로 옮겼습니다. 이제는 javascript가 새로운 PHP 실행을 요청하고 있습니다. 10 초이지만 페이지로드가 이제는 괜찮은 것 같습니다. –

답변

1

계속 같은 느낌입니다. 당신은 확실히 어떤 우아한 방식 으로든 이것을 PHP에서 할 수 없습니다. 이렇게하려면 현재 상태를 저장하고 상태를로드 할 때 중단 한 위치에서 다시 시작할 수있는 방식으로 코드를 작성하는 것이 가장 좋습니다.

+0

나는 같은 결론에 도달하기 시작했습니다. 나는 기본적인 롱 폴링 솔루션을 구현하고 문서/주석에 특정 서버 환경에서 최적이 아닌 주석을 달고 있다고 생각합니다. 그런 식으로 누군가가 그것을 사용하려고한다면 기본 기능이 이미 있습니다. –

0

나는 해결책이 있다고 생각하지 않습니다. 일반 요청과 폴링 요청을 구분할 수 없습니다. 도움이 될만한 Apache는 피하십시오 (예 : 80에서 nginx 실행, 폴링 요청을 제외한 모든 요청을 81에서 Apache로 전달).

나는 또한 문제가 있다고 생각하지 않습니다. Nginx 나 다른 서버는 Apache보다 훨씬 효율적이지 않습니다. 폴링은 PHP 요청이며 mod_php가있는 Apache는 그다지 좋은 선택이 아닙니다. Nginx는 PHP를 제공 할 때 Apache보다 적은 리소스를 사용하지 않습니다.

+4

'Nginx는 PHP를 제공 할 때 Apache보다 리소스를 덜 사용하지 않습니다. ' http://serverfault.com/questions/157520/apache-vs-nginx –

+0

물론입니다. 나는 그 반대의 것을 말하는 그 URL에서 아무것도 읽지 않는다. "mod_php는 PHP-fpm보다 약간 빠릅니다.", "cgi는 mod_php보다 훨씬 느립니다"물론, 역방향 프록시를 캐싱 할 경우에는 일반 PHP 파일/정적 파일과 비교하여 긴 폴링 횟수에 따라 다릅니다. 아파치는 아파치에서 얼마나 많은 모듈을 사용하고 있는지 정적 파일로 귀찮게하지 않습니다 ... – jcisio