Организация асинхронности и событий

Темы, не касающиеся фреймворка, но относящиеся к программированию в целом.
Ответить
Аватара пользователя
mitaichik
Сообщения: 512
Зарегистрирован: 2010.09.24, 21:18
Откуда: Россия, Санкт-Петербург

Организация асинхронности и событий

Сообщение mitaichik »

Всем привет. У меня есть 2 задачи:

1. Мне нужно запустить одновременно 10 задач (в моем случае - это сделать http запрос к api яндекса), и, когда выполниться последняя, продолжить выполнение скрипта. Запускать нужно параллельно, иначе очень долго.

2. Ко мне приходит запрос на получение данных. Я вижу что этот запрос уже обрабатывается (инициированный другим клиентом). Я оставляю всех клиентов ожидать, и когда получаю результат - отдаю им всем. Все запросы от клиентов я получаю обычным http.

Подскажите пожалуйста с помощью каких механизмов можно решить данные задачи... Конечно хотелось бы чтоб с помощью php, хоть он вроде и не предназначен для таких задач...
Аватара пользователя
samdark
Администратор
Сообщения: 9489
Зарегистрирован: 2009.04.02, 13:46
Откуда: Воронеж
Контактная информация:

Re: Организация асинхронности и событий

Сообщение samdark »

Ответы важны? Обязательно продолжать только когда выполнится последняя?
p0rsche
Сообщения: 192
Зарегистрирован: 2012.01.18, 08:28
Контактная информация:

Re: Организация асинхронности и событий

Сообщение p0rsche »

1. Вам нужно копать в сторону Promises. Да, с PHP проблемно, но и для него я что-то подобное видел. Но лучше копнуть в сторону JS, у него с этим все в полном порядке (step, flow.js, node-promise, async, async.js и др.)
2. Расширение publish\subscribe архитектуры. Или просто массив с заданиями. Приходит запрос, смотрим в массив, если уже есть, встаем в очередь на получение. Если нет, добавляем. Удобно это делать через callback-функции (к примеру, у задачи сделать колбэк onSuccess(), в котором в случае успешного выполнения будет перебираться массив слушателей - клиентов, ожидающих результат - и отдавать им данные, лучше даже в параллельном режиме). Опять же, JS тут правит балом.
Аватара пользователя
mitaichik
Сообщения: 512
Зарегистрирован: 2010.09.24, 21:18
Откуда: Россия, Санкт-Петербург

Re: Организация асинхронности и событий

Сообщение mitaichik »

Sam Dark писал(а):Ответы важны? Обязательно продолжать только когда выполнится последняя?
Ответы важны. А вот с обработкой - по сути можно каждый ответ отдельно обрабатывать. (хотя вместе конечно быстрее было бы)
p0rsche писал(а):1. Вам нужно копать в сторону Promises. Да, с PHP проблемно, но и для него я что-то подобное видел. Но лучше копнуть в сторону JS, у него с этим все в полном порядке (step, flow.js, node-promise, async, async.js и др.)
2. Расширение publish\subscribe архитектуры. Или просто массив с заданиями. Приходит запрос, смотрим в массив, если уже есть, встаем в очередь на получение. Если нет, добавляем. Удобно это делать через callback-функции (к примеру, у задачи сделать колбэк onSuccess(), в котором в случае успешного выполнения будет перебираться массив слушателей - клиентов, ожидающих результат - и отдавать им данные, лучше даже в параллельном режиме). Опять же, JS тут правит балом.
Да, согласен про js, просто никогда с серверной частью не сталкивался, очково, как минимум за безопасность данных....

Я где-то читал про некий герман (вроде так называется) - он позваляет очереди создавать вроде как, мож его прикрутить... Правда не могу найти инфу по нему, видимо не так называется...
Аватара пользователя
MaxHero
Сообщения: 144
Зарегистрирован: 2011.09.12, 04:34
Откуда: Украина, Киев

Re: Организация асинхронности и событий

Сообщение MaxHero »

Все верно, с помощью gearman можно сделать то, что Вам надо
p0rsche
Сообщения: 192
Зарегистрирован: 2012.01.18, 08:28
Контактная информация:

Re: Организация асинхронности и событий

Сообщение p0rsche »

http://habrahabr.ru/post/142210/
http://habrahabr.ru/post/123451/
В принципе, любой amqp-юрокер также подойдет, но для простоты можно копнуть и в сторону gearman.
Ответить