2014-12-15 7 views
4

Я использую Guzzle, который я установил через композитор и не смог сделать что-то относительно прямолинейное.Неисправный запрос асинхронного запроса

Возможно, я недопонимаю documentation, но по существу то, что я хочу сделать, - это выполнить запрос POST на сервер и продолжить выполнение кода, не дожидаясь ответа. Вот что у меня есть:

$client = new \GuzzleHttp\Client(/*baseUrl, and auth credentials here*/); 
$client->post('runtime/process-instances', [ 
    'future'=>true, 
    'json'=> $data // is an array 
]); 
die("I'm done with the call"); 

Теперь давайте говорить о runtime/process-instances пробегов около 5mn, я не получит сообщение умереть, прежде чем эти 5 подключениеды ... Когда вместо этого я хочу это сразу после того, сообщение отправлено к серверу.

Теперь у меня нет доступа к серверу, поэтому я не могу ответить на сервер до запуска выполнения. Мне просто нужно игнорировать ответ.

Любая помощь приветствуется.

Что я пробовал:

$client->post(/*blabla*/)->then(function ($response) {}); 

ответ

2

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

Также обратите внимание, что вы используете post вместо postAsync, первый - синхронный (блокирующий) запрос. Чтобы асинхронно отправить почтовый запрос, используйте последний. В вашем примере кода, изменив post на postAsync, процесс завершится до того, как запрос будет завершен, но цель не получит этот запрос.

0

Вы пробовали настройки с низким timeout?

+0

По умолчанию не время ожидания. –

+0

Я не думал об этом. Однако он чувствует себя очень взломанным. Есть ли причина, почему асинч работает не так, как ожидалось? Или я не понимаю, что означают асинхронные функции? –

+1

@ D.Mill async в PHP - это для меня в основном для выполнения нескольких запросов одновременно. – OIS