Здравствуйте, этот скрипт php с использованием curl занимает около 10 минут, чтобы завершить отправку 2500 push-уведомлений на сервер Apple HTTP / 2 APNS.
Как я могу ускорить количество запросов http, отправляемых на один и тот же сервер, если URL меняется каждый раз.
$curl = curl_init();
curl_setopt_array($curl, array(
CURLOPT_HTTP_VERSION => CURL_HTTP_VERSION_2_0,
CURLOPT_URL => $url,
CURLOPT_PORT => 443,
CURLOPT_HTTPHEADER => $headers,
CURLOPT_POST => TRUE,
CURLOPT_POSTFIELDS => $json_alert,
CURLOPT_RETURNTRANSFER => TRUE,
CURLOPT_SSL_VERIFYPEER => FALSE,
CURLOPT_HEADER => 1
));
// send push for each token
foreach ($all_tokens as $device_token) {
$url = "{$base_url}/3/device/{$device_token}";
// set url per device token
curl_setopt($curl, CURLOPT_URL, $url);
// go...
$result = curl_exec($curl);
// get response
$status = curl_getinfo($curl);
if ($status['http_code'] == '410') {
// device does not accept push for this app anymore
$bad_tokens[] = $device_token;
} else if($status['http_code'] == '200') {
$push_sent_succss_count += 1;
}
}
curl_close($curl);
Вы могли бы использовать PHP cURL мульти ручка, или использовать библиотеку, такую как Guzzle, с функции дозирования.
Это позволит вам отправлять запросы параллельно и либо обрабатывать ответы по мере их поступления, либо ждать последнего / самого медленного запроса, а затем обрабатывать все ответы.
Других решений пока нет …