Лучший способ сделать асинхронную обработку в PHP - PullRequest
3 голосов
/ 21 февраля 2012

Мне нужно построить систему (в PHP), которая выполняет массивные запросы на MSSQL для получения результата следующим образом:

У меня есть 10 независимых запросов, которые мне нужно выполнить, когда пользователь заходит на страницу (некоторые из них массовые). Какое решение является наиболее масштабируемым для параллельного запуска 3 запросов (7 в очереди), а когда запрос завершен, запустите другой из очереди?

Мне нужно, чтобы страница загружалась мгновенно, и когда запрос завершится, покажите пользователю ответ на этот запрос (порядок не так важен).

Я принял во внимание: AJAX, beanstalkd, NodeJS, libevent и Gearman или реализую его как веб-сервис в Java (используя потоки и параллельную обработку).

PS: я также нашел AJAX PUSH ENGINE (APE - http://www.ape-project.org/) и xRML (http://www.xrtml.org/), но никогда не использовал его

Ответы [ 2 ]

2 голосов
/ 21 февраля 2012

ПРИМЕЧАНИЕ этот ответ предназначен для первой редакции вопроса, в частности, не запрашивающего MSSQL

MySQL поддерживает асинхронные запросы через MySQLi при использовании mysqlnddriver.

Передача MYSQLI_ASYNC (доступно с mysqlnd) в качестве аргумента $resultmode в mysqli_query() выполняет запрос асинхронно.mysqli_poll() и mysqli_reap_async_query() затем используются для получения результатов таких запросов.

Также см. http://blog.ulf -wendel.de /? P = 170 для подробного обсуждения параллельных, фоновых и асинхронных идей извлечения для mysqlnd.

1 голос
/ 21 февраля 2012

Мое решение было бы поместить задания запросов в очередь сообщений beanstalk для обслуживания фоновым процессом (демон?). Когда задания завершены, результирующие наборы где-то кэшируются.

Загруженная страница использует AJAX (в виде цикла опроса - например, запрос каждые 10 секунд), чтобы узнать из серверного приложения, готовы ли результаты (что он делает, просматривая в кеше набор результатов). ).

Когда результаты становятся доступны, серверное приложение отправляет их на страницу, которая загружает их в div.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...