php_curl_multi: Пара вопросов

Добрый день, это снова я.

Подскажите, требуется реализовать вот такой класс — менеджер запросов.
Основная задача: функции должны возвращать управление моментально.
Хотел сделать на cURL (curl_multi), возникли следующие проблемы:
Вопрос 1
практически не нашел понятной документации по curl_multi_exec (касательно возвращаемого значения), а именно:
всегда ли curl_multi_exec возвращает CURLM_OK, если все переданные дескрипторы потоков корректно могут выполняться?
Вопрос 2
Можно ли после вызова culr_multi_exec добавлять (curl_multi_add_handler) потоки после чего повторно выполнять curl_multi_exec, если часть потоков уже выполняется, часть — уже выполнилась. Можно ли их убирать (curl_multi_remove_handler) во время выполнения?
Сейчас на каждый посылаемый запрос создается помимо «обычного» потока (curl_init) еще один мульти-поток (curl_multi_init). Надо было написать быстро, не стал тестировать
Вопрос 3
Возможно, есть уже такой удобный класс, дабы не реализовывать самому (повтор ошибочных запросов, удаление незапрошенных в течение X минут данных, примитивные проверки)
/*
* Интерфейс класса:
*     sendRequest - отправить запрос
*     getResponse - получить данные по запросу, если выполнен, если нет - NULL
*/
class X { 
          public sendRequest($request_data) {
          //...
          returb $new_request_id;
          }
          public getResponse($request_id) {
          //...
          return (is_null($response)?"NULL":$response)
          }
}
  • Вопрос задан
  • 3387 просмотров
Решения вопроса 1
@WEBIVAN
Сейчас на каждый посылаемый запрос создается помимо «обычного» потока (curl_init) еще один мульти-поток (curl_multi_init). Надо было написать быстро, не стал тестировать

Это вы очень жестоко делаете. Достаточно одного мульти-потока, в который можно добавлять и удалять обычные потоки в процессе работы.
Ответ написан
Пригласить эксперта
Ответы на вопрос 1
Wott
@Wott
Есть хорошая обертка — MultiCurl от Vadym Timofeyev <tvad@mail333.com>
Ответ написан
Комментировать
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Похожие вопросы