|
|
|
| PHP код:
for( $i = 1; $i <= 10; $i++ )
{
$content=file_get_contents("https://****/$i/***/");
...
обработка
...
}
|
Время выполнения цикла 3,65 секунды.
Задача.
Нужно все 10 file_get_contents выполнить одновременно, сократив время в 10 раз. Сохранив запросы в разных
$content_1, ... , $content_10 для последующей обработки
Вопрос.
Как?
Возможно использование VPS с 10-12 ядрами, но лучше сэкономить. | |
|
|
|
|
|
|
|
для: Port_Artur3
(08.04.2017 в 12:25)
| | Заменил на такой пример, что сократило время до 2 секунд, как сделать ещё быстрее?
$urls = array(
'http://www.google.ru/',
'http://www.altavista.com/',
'http://www.yahoo.com/'
);
$mh = curl_multi_init();
foreach ($urls as $i => $url) {
$conn[$i]=curl_init($url);
curl_setopt($conn[$i],CURLOPT_RETURNTRANSFER,1); //ничего в браузер не давать
curl_setopt($conn[$i],CURLOPT_CONNECTTIMEOUT,10); //таймаут соединения
curl_multi_add_handle ($mh,$conn[$i]);
}
//Пока все соединения не отработают
do { curl_multi_exec($mh,$active); } while ($active);
//разбор полетов
for ($i = 0; $i < count($urls); $i++) {
//ответ сервера в переменную
$res[$i] = curl_multi_getcontent($conn[$i]);
curl_multi_remove_handle($mh, $conn[$i]);
curl_close($conn[$i]);
}
curl_multi_close($mh);
print_r($res);
|
Говорят что можно ещё использовать pcntl_fork и fsockopen
Но я не могу понять как сделать чтобы это всё было внутри одного PHP, чтобы полученные данные использовать в виде переменных дальше в скрипте, безо всяких записей в файлы или базу. Чтобы как можно быстрее было всё.
Максимальное время одного запроса 0,46 секунды, вот если бы сократить хотя бы до 0,5-0,6 сек. Было бы супер!
Помогите пожалуйста! | |
|
|
|