2010-11-22 3 views
1

아니요, 하나의 질문 제목에 얼마나 많은 유행어를 던지려고하지 않습니다.AJAX long-polling a REST API/Memcached PHP 응용 프로그램

PHP 응용 프로그램에서 일부 웹 서비스에 대해 cURL을 통해 REST 요청을 만들고 있습니다. 응용 프로그램의 대부분이이 API에 의존하기 때문에 이러한 요청은 상당히 자주 작성되어야합니다. 그러나 요청이 심각 해지면 (2-5 초) 앱이 고통스럽게 느려집니다.

Memcached에서 이러한 요청을 캐시하기위한 권장 사항이있는 해결책의 중간 정도이지만, 여전히 응용 프로그램 내에 나타나는 지연 시간에 만족하지 못합니다.

여기 내 생각이 들었습니다. 백그라운드에서 AJAX long-polling을 구현하여 사용자가 대기 시간을 전혀 경험하지 못하게 할 수 있습니다. REST 요청/Memcache 조회는 설정된 간격으로 AJAX를 통해 모두 수행됩니다.

그러나 이것은 모두 내게 정말 새롭고 이것이 최선의 접근 방법인지 확신 할 수 없습니다. 그리고 올바른 방향이라면 PHP + Apache가 이와 같은 것을 잘 처리하지 못할 것이라는 것을 알고 있습니다. 하지만 PHP 만 내가 아는 유일한 언어입니다. 파이썬에서 Tornado와 같은 것을 설정하는 것이 이상적이지만, 지금은 너무 많은 엔지니어링을하고 있는지 확실하지 않습니다.

모든 의견은 도움이되고 많은 도움이 될 것입니다.

+0

REST 요청과 웹 서비스 간의 거리는 얼마입니까? 또 다른 단어는 대기 시간이 네트워크에 의해 발생했거나 단순히 나머지 요청이 느린 것입니다. REST 요청에 대한 캐시 예열을 고려 했습니까? – ajreal

+0

@ajreal, 캐시 예열이란 무엇입니까? –

+0

워밍업은 memcache가 REST의 유효한 데이터로 채워지도록 데이터 세트를 미리로드하는 것입니다. 즉, 애플리케이션에 어떤 REST URL을 결정하도록하지 않고 백그라운드 작업을 실행하여 이러한 REST URL을 미리 가져올 수 있습니다. 데이터베이스 나 파일을 사용하여 애플리케이션에서 실행 한 REST URL을 추적 할 수 있습니다. 이런 경우에는 – ajreal

답변

0

이것은 꽤 빠른 처리 였지만 관련 프로세스 전반에 걸쳐 microtime()을 반향 출력하여 내 앱을 프로파일 링했습니다. 내가 cURL 요청을 병렬 처리하지 않는다는 사실이 밝혀졌고, 이것이 내가 진정한 히트작이되는 곳입니다. 이 작업을 수행하는 데 약 2 초가 걸리므로 각 cURL 요청이 연속해서 완료되는 동안 매우 긴 지연이 발생합니다.

+1

을 사용하십시오. curl_multi_exec - http://php.net/manual/en/function.curl-multi-exec.php – ajreal

+0

@ajreal 그 조언을 주셔서 감사합니다. 그것은 실제로 제가 결국 사용하게 된 것입니다. –