2010-11-22 3 views
1

Нет, я не пытаюсь понять, сколько слов можно задать в одном вопросе.AJAX долгий опрос API REST/Memcached в приложении PHP

Я делаю запросы REST через cURL в своем приложении PHP для некоторых веб-сервисов. Эти запросы нужно делать довольно часто, поскольку большая часть приложения зависит от этого API. Однако есть серьезные задержки с запросами (2-5 секунд), которые просто заставляют мое приложение выглядеть довольно медленно.

Пока я нахожусь на полпути к решению с рекомендацией кэшировать эти запросы в Memcached, меня все еще не удовлетворяет такая латентность, когда-либо появляющаяся в приложении.

Итак, вот моя мысль: я могу реализовать длинный опрос AJAX в фоновом режиме, чтобы пользователь никогда не испытывал латентность прямо. Запросы REST/поиск в Memcache будут выполняться через AJAX с заданным интервалом.

Но это все очень ново для меня, и я не уверен, что это лучший подход. И если я на правильном пути, я знаю, что PHP + Apache не будет обрабатывать что-то подобное. Но PHP - единственный язык, который я знаю. В идеале я хотел бы создать что-то вроде Tornado в Python, но я просто не уверен, что сейчас я слишком переутомляю или нет.

Любые мысли здесь были бы полезны и высоко оценены.

+0

Каково расстояние между запросами REST и вашими веб-сервисами? Другое слово, латентность вызвана сетью или просто остальные запросы просто медленны. Если бы вы рассматривали разминку кеша для запросов REST? – ajreal

+0

@ajreal, Что такое разогрев кеша? –

+0

Прогрев - это предварительная загрузка набора данных, чтобы память memcache была заполнена действительными данными из REST. Смысл, вместо того чтобы позволить вашему приложению определить, какой URL-адрес REST, вы можете запустить фоновое задание для предварительного выбора этих URL-адресов REST. Вы можете использовать базу данных или файл, чтобы отслеживать URL-адрес REST, который вы выполнили в своем приложении. – ajreal

ответ

0

Это был довольно быстрый поворот, но я вернулся и профилировал свое приложение, повторив microtime() во всех соответствующих процессах. Оказывается, я не распараллеливаю свои запросы cURL, и именно там я и делаю настоящий удар. Для этого требуется приблизительно 2 секунды, что означает очень длительные задержки, в то время как каждый запрос cURL выполняется последовательно.

+1

в таком случае, рассмотрите использование curl_multi_exec - http://php.net/manual/en/function.curl-multi-exec.php – ajreal

+0

@ajreal Спасибо за совет по этому поводу. Именно это я и использовал. –