PHP одновременных HTTP-запросов? - PullRequest
3 голосов
/ 07 октября 2011

Мне было интересно, как лучше выполнять параллельные HTTP-запросы в PHP?У меня много данных для получения, и я бы предпочел сделать несколько запросов одновременно, чтобы получить все это.

Кто-нибудь знает, как я могу это сделать?Предпочтительно в функции анонимного / обратного вызова mannor ...

Спасибо,

Том.

Ответы [ 4 ]

9 голосов
/ 07 октября 2011

Вы можете использовать curl_multi , который внутренне запускает несколько отдельных запросов под одной ручкой curl.

Но в остальном сам PHP никоим образом / форма / форма не является "многопоточным" и не позволяет вещам работать параллельно, кроме как через грубые хаки (несколько параллельных сценариев, один сценарий, запускающий несколько фоновых задач через exec () и т. Д. ...).

2 голосов
/ 07 октября 2011

Вы можете попробовать либо curl_multi () , либо использовать функцию более низкого уровня socket_select ()

1 голос
/ 24 октября 2017

Или, если хотите, вы можете отправить свои данные как json. В php вы можете снова дефрагментировать его на все значения. например,

xhttp.open("GET", "gotoChatRoomorNot.php?q=[{"+str+"},{"+user1+"},{"+user2"}]", true);

и в php вы можете следить за этим, чтобы получить ваши данные: Как извлечь данные из JSON с PHP?

Так что сделайте строку в формате json и отправьте всю вещь через http. Я думаю, что вы можете выполнить то же самое поведение с XML, но я не знаю, XML

0 голосов
/ 27 ноября 2013

вы можете использовать HttpRequestPool http://www.php.net/manual/de/httprequestpool.construct.php

$multiRequests = array(
  new HttpRequest('http://www.google.com', HttpRequest::METH_GET),
  new HttpRequest('http://www.yahoo.com', HttpRequest::METH_GET)
  new HttpRequest('http://www.bing.com', HttpRequest::METH_GET)
);

$pool = new HttpRequestPool();
foreach ($multiRequests as $request)
{
  $pool->attach($request);
}

$pool->send();

foreach($pool as $request) 
{
  echo $request->getResponseBody();
}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...