Вы пропустили вставить Double Quotes. Точный запрос -
db.theColl.find( { "_id": ObjectId("4ecbe7f9e8c1c9092c000027") } )
Я вполне уверен, HttpRequestPool - то, что Вы ищете.
Для разработки немного можно использовать разветвление для достижения того, что Вы ищете, но это кажется излишне сложным и не очень полезное в контексте HTML. В то время как я не протестировал, этот код должен быть этим:
// let $requests be an array of requests to send $pool = new HttpRequestPool(); foreach ($requests as $request) { $pool->attach($request); } $pool->send(); foreach ($pool as $request) { // do stuff }
Вы пробовали HttpRequestPool (это - часть Http)? Похоже, что это объединило бы объекты запроса и работало бы их. Я знаю, что считал где-нибудь, что Http будет поддерживать одновременные запросы, и кроме пула я ничего не могу найти также.
Я когда-то должен был решить подобную проблему: выполнение нескольких запросов, не накапливая время отклика.
Решение закончило тем, что было сделанной на заказ функцией, которая использовала неблокирующиеся сокеты. Это работает что-то вроде этого:
$request_list = array(
# address => http request string
#
'127.0.0.1' => "HTTP/1.1 GET /index.html\nServer: website.com\n\n",
'192.169.2.3' => "HTTP/1.1 POST /form.dat\nForm-data: ...",
);
foreach($request_list as $addr => $http_request) {
# first, create a socket and fire request to every host
$socklist[$addr] = socket_create();
socket_set_nonblock($socklist[$addr]); # Make operation asynchronious
if (! socket_connect($socklist[$addr], $addr, 80))
trigger_error("Cannot connect to remote address");
# the http header is send to this host
socket_send($socklist[$addr], $http_request, strlen($http_request), MSG_EOF);
}
$results = array();
foreach(array_keys($socklist) as $host_ip) {
# Now loop and read every socket until it is exhausted
$str = socket_read($socklist[$host_ip], 512, PHP_NORMAL_READ);
if ($str != "")
# add to previous string
$result[$host_ip] .= $str;
else
# Done reading this socket, close it
socket_close($socklist[$host_ip]);
}
# $results now contains an array with the full response (including http-headers)
# of every connected host.
Это намного быстрее с тех пор преобразовывается, reponses выбираются в полупараллели, так как socket_read не ожидает ответа, но возвращается, если буфер сокета еще не полон.
Можно перенести это в соответствующие интерфейсы ООП. Необходимо будет создать строку Запроса HTTP сами и обработать ответ сервера, конечно.
Вы могли использовать pcntl_fork () для создания отдельного процесса для каждого запроса, затем ожидать их для окончания:
http://www.php.net/manual/en/function.pcntl-fork.php
Есть ли какая-либо причина, Вы не хотите использовать ЗАВИХРЕНИЕ? Функции curl_multi_* допускали бы несколько запросов одновременно.
Функции HTTP PHP не встроены, ни один - они - расширение PECL. Если Ваше беспокойство будет людьми, имеющими необходимость устанавливать дополнительный материал, то оба решения будут иметь ту же проблему - и ЗАВИХРЕНИЕ, более вероятно, будет установлено, я вообразил бы, как это прибывает значение по умолчанию с каждым веб-хостом, я когда-либо шел.
Друг указал на меня на CurlObjects (http://trac.curlobjects.com/trac) недавно, который я нашел довольно полезным для использования curl_multi.
$curlbase = new CurlBase; $curlbase->defaultOptions[ CURLOPT_TIMEOUT ] = 30; $curlbase->add( new HttpPost($url, array('name'=> 'value', 'a' => 'b'))); $curlbase->add( new HttpPost($url2, array('name'=> 'value', 'a' => 'b'))); $curlbase->add( new HttpPost($url3, array('name'=> 'value', 'a' => 'b'))); $curlbase->perform();
foreach ($curlbase-> запрашивает как $request) {...}