Отправляю уведомления с использованием multi curl'a и сервиса firebase cloud messaging. Все сообщения с разными данными, поэтому одним сообщением, указав только токены отправить не получается. (Возможно не самое лучшее решение) При отправке около 400 сообщений всё ок, если больше (напр. 800) то возникает ошибка OpenSSL. Система Ubuntu 18.04, обновил openssl до 1.1.1b, не помогло. При этом проверял на другом сервере с теми же версиями ОС, openssl, curl'а, php, там всё работало.
OpenSSL SSL_connect: SSL_ERROR_SYSCALL in connection to fcm.googleapis.com:443
$connectionArray = [];
$cmh = curl_multi_init();
$headers = [
'Authorization:key = fcm.serverKey',
'Content-Type: application/json'
];
foreach($notifyArr as $notify) {
$fields = [
'registration_ids' => explode(',', $notify->user_token),
'priority' => 'high',
'content_available' => true,
'notification' => [
'title' => $notify->title,
'body' => $notify->text,
'sound' => 'default'
]
];
$ch = curl_init();
curl_setopt($ch, CURLOPT_URL, 'fcm.url');
curl_setopt($ch, CURLOPT_POST, true);
curl_setopt($ch, CURLOPT_HTTPHEADER, $headers);
curl_setopt($ch, CURLOPT_RETURNTRANSFER, true);
curl_setopt($ch, CURLOPT_SSL_VERIFYHOST, 0);
curl_setopt($ch, CURLOPT_SSL_VERIFYPEER, false);
curl_setopt($ch, CURLOPT_POSTFIELDS, json_encode($fields));
curl_setopt($ch, CURLOPT_CONNECTTIMEOUT, 10);
curl_setopt($ch, CURLOPT_TIMEOUT, 10);
$connectionArray[] = $ch;
curl_multi_add_handle($cmh, $ch);
}
$running = null;
do {
curl_multi_exec($cmh, $running);
} while($running > 0);
foreach($connectionArray as $ch) {
$info = curl_getinfo($ch);
if( $info['total_time'] <= 0 || !is_numeric($info['total_time']) ) {
$errors = true;
continue;
}
curl_multi_remove_handle($cmh, $ch);
}
curl_multi_close($cmh);