PHP блокирует запрос к удаленным веб-сервисам с помощью guzzle

я пытаюсь выполнить запрос к веб-службе для загрузки больших файлов на мой сервер. Мое веб-приложение находится в laravel 4, и я использую guzzle для выполнения запроса.

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

Вот пример моего кода:

    public function download($id, $url, $filename)
    {
        // some data for request

        $request = $httpClient->get($downloadFileUrl, array(
               'future' => true, 
               'cookies' => true, 
               'save_to' => $filename
               )
         );

         return $cookieRequest;
     }

Раньше я использовал exec для запуска сценариев curl или wget для загрузки файлов на сервер. Но я хотел бы иметь больше контроля над запросами и ответами.

Любая помощь будет оценена по достоинству,

Спасибо


person mibo    schedule 29.10.2014    source источник


Ответы (1)


Вы можете использовать рабочие очереди для запуска загрузки в фоновом режиме:

Queue::push(function($job)
{
    $request = $httpClient->get($downloadFileUrl, array(
        'future' => true, 
        'cookies' => true, 
        'save_to' => $filename
    ));

    $job->delete();
});

Вот хорошая статья о том, как настроить Laravel с помощью Beanstalkd, но вы также можете использовать другие, такие как IronMQ, Amazon SQS, Redis.

person Bogdan    schedule 29.10.2014
comment
Спасибо, я посмотрю на это. - person mibo; 29.10.2014