2015-02-05 3 views
0

Pleeeeease помочь мне ...: -)Асинхронный requestAction

"Ты моя единственная надежда".

Мне нужно выполнить действие асинхронно несколько тысяч раз. Предполагается, что действие будет получать содержимое электронной почты из внешнего API и расположено в другом контроллере, поэтому я использую requestAction, чтобы получить его. Когда я получаю все результаты, эти 1000 электронных писем отправляются как 1000 писем в течение одного запроса, используя другой API.

К сожалению, при запуске последовательно, это занимает много времени, поэтому мне нужно выполнить этот запрос асинхронно.

Мой вопрос: Могу ли я выполнить

$this->requestAction($myUrl) 

... параллельно? Например, 100 запросов за один раз? Я видел несколько асинхронных примеров в PHP, но все они использовали статические файлы, и мне нужно сохранить структуру CakePHP, чтобы иметь возможность использовать requestAction.

Спасибо всем, кто может помочь!

EDIT: Кстати, когда я пытался запускать запросы через fopen ($ url, 'r');, а затем поток получить содержимое эффективность была хуже, чем худшая, но, возможно, ее можно было бы улучшить. Не знаю, но requestAction, кажется, определенно лучший вариант (я думаю).

ответ

2

Есть ли причина, почему вы не используете оболочку для этого? Пожалуйста, взгляните на: CakePHP Shells

«Отсроченное исполнение», вероятно, вы здесь, в основном вы хотите отправить одну команду, чтобы пользователь не ждал ее? Если это так, вы можете использовать Message Queue, чтобы справиться с этим довольно легко.

Мы используем CakeResque и Redis для отправки 1000-писем и выполнять другие API вызовы

CakeResque - Deferred Processing for CakePHP

Есть другие очереди сообщений, которые доступны, но это действительно просто получить работу и, вероятно, не нужно много изменение вашего кода.

0

В конце концов, я не смог найти решение, которое будет использовать requestAction, но я был в состоянии извлечь код к автономному PHP-файл, который затем обрабатывается с использованием включают метод.

И самое интересное, асинхронные запросы, было сделано с помощью большой библиотеки под названием Curl-легкий и с помощью моей функции полезности. Вы можете прочитать об этом (как установить и как использовать его) здесь:

Is making asynchronous HTTP requests possible with PHP?

Смежные вопросы