Всем привет. У меня есть 2 задачи:
1. Мне нужно запустить одновременно 10 задач (в моем случае - это сделать http запрос к api яндекса), и, когда выполниться последняя, продолжить выполнение скрипта. Запускать нужно параллельно, иначе очень долго.
2. Ко мне приходит запрос на получение данных. Я вижу что этот запрос уже обрабатывается (инициированный другим клиентом). Я оставляю всех клиентов ожидать, и когда получаю результат - отдаю им всем. Все запросы от клиентов я получаю обычным http.
Подскажите пожалуйста с помощью каких механизмов можно решить данные задачи... Конечно хотелось бы чтоб с помощью php, хоть он вроде и не предназначен для таких задач...
Организация асинхронности и событий
- samdark
- Администратор
- Сообщения: 9489
- Зарегистрирован: 2009.04.02, 13:46
- Откуда: Воронеж
- Контактная информация:
Re: Организация асинхронности и событий
Ответы важны? Обязательно продолжать только когда выполнится последняя?
Нравится Yii? Давайте сделаем его лучше!.
Re: Организация асинхронности и событий
1. Вам нужно копать в сторону Promises. Да, с PHP проблемно, но и для него я что-то подобное видел. Но лучше копнуть в сторону JS, у него с этим все в полном порядке (step, flow.js, node-promise, async, async.js и др.)
2. Расширение publish\subscribe архитектуры. Или просто массив с заданиями. Приходит запрос, смотрим в массив, если уже есть, встаем в очередь на получение. Если нет, добавляем. Удобно это делать через callback-функции (к примеру, у задачи сделать колбэк onSuccess(), в котором в случае успешного выполнения будет перебираться массив слушателей - клиентов, ожидающих результат - и отдавать им данные, лучше даже в параллельном режиме). Опять же, JS тут правит балом.
2. Расширение publish\subscribe архитектуры. Или просто массив с заданиями. Приходит запрос, смотрим в массив, если уже есть, встаем в очередь на получение. Если нет, добавляем. Удобно это делать через callback-функции (к примеру, у задачи сделать колбэк onSuccess(), в котором в случае успешного выполнения будет перебираться массив слушателей - клиентов, ожидающих результат - и отдавать им данные, лучше даже в параллельном режиме). Опять же, JS тут правит балом.
Re: Организация асинхронности и событий
Ответы важны. А вот с обработкой - по сути можно каждый ответ отдельно обрабатывать. (хотя вместе конечно быстрее было бы)Sam Dark писал(а):Ответы важны? Обязательно продолжать только когда выполнится последняя?
Да, согласен про js, просто никогда с серверной частью не сталкивался, очково, как минимум за безопасность данных....p0rsche писал(а):1. Вам нужно копать в сторону Promises. Да, с PHP проблемно, но и для него я что-то подобное видел. Но лучше копнуть в сторону JS, у него с этим все в полном порядке (step, flow.js, node-promise, async, async.js и др.)
2. Расширение publish\subscribe архитектуры. Или просто массив с заданиями. Приходит запрос, смотрим в массив, если уже есть, встаем в очередь на получение. Если нет, добавляем. Удобно это делать через callback-функции (к примеру, у задачи сделать колбэк onSuccess(), в котором в случае успешного выполнения будет перебираться массив слушателей - клиентов, ожидающих результат - и отдавать им данные, лучше даже в параллельном режиме). Опять же, JS тут правит балом.
Я где-то читал про некий герман (вроде так называется) - он позваляет очереди создавать вроде как, мож его прикрутить... Правда не могу найти инфу по нему, видимо не так называется...
Re: Организация асинхронности и событий
Все верно, с помощью gearman можно сделать то, что Вам надо
Re: Организация асинхронности и событий
http://habrahabr.ru/post/142210/
http://habrahabr.ru/post/123451/
В принципе, любой amqp-юрокер также подойдет, но для простоты можно копнуть и в сторону gearman.
http://habrahabr.ru/post/123451/
В принципе, любой amqp-юрокер также подойдет, но для простоты можно копнуть и в сторону gearman.