Я пытаюсь настроить clickatell для отправки пакетных смс. У меня это работает, но довольно медленно. Около 20 секунд, чтобы отправить 5 тестовых SMS и 30 секунд для 10 тестовых SMS.
$nums = array(
"44-227811116" => "1",
"44-227819885" => "2",
"44-227819314" => "3",
"44-227815413" => "4",
"44-227819326" => "5");
//login
$url="https://api.clickatell.com/http/auth?api_id=xxxxx&user=xxxxx&password=xxxxx";
$page=Utilities::getWebPage($url);
//session
$clicksessionparts=explode(":", $page);
$clicksession=trim($clicksessionparts[1]);
//batch
$from=xxxxx;
$batchTemplate = urlencode("Test message #field1#");
$url="https://api.clickatell.com/http_batch/startbatch?session_id=$clicksession&template=$batchTemplate&from=$from&deliv_ack=1";
$page=Utilities::getWebPage($url);
$batchId=explode(":",$page);
$batchId=trim($batchId[1]);
foreach ($nums as $k => $v)
{
$start = new DateTime();
print_r($start->format("H i:s"));
$url="https://api.clickatell.com/http_batch/senditem?session_id=$clicksession&batch_id=$batchId&to=xxxxx&field1=$v";
$page=Utilities::getWebPage($url);
echo "<pre>";
print_r($page);
echo "</pre>";
$end = new DateTime();
print_r($end->format("H i:s"));
echo "<br><br>";
}
Вы должны иметь возможность отправлять более 100 сообщений в секунду в HTTP API с комфортом.
Создание HTTPS-соединений — очень медленный процесс (по сравнению с HTTP). Если вы хотите повысить производительность с HTTPS, вам придется повторно использовать соединения.
Я предполагаю, что Utilities :: getWebPage () каждый раз создает новое HTTPS-соединение? Для PHP я бы посоветовал вам взглянуть на использование cURL.
Если вы хотите сделать еще один шаг дальше (я сомневаюсь, что вам нужно заходить так далеко), вы можете рассмотреть возможность использования curl_multi … Это немного больше работы, хотя и большинству людей не нужна такая большая скорость (некоторым легче просто использовать другой). API, как SMTP API, поэтому они имеют много сообщений в 1 электронном письме).
Кроме того, технически вам не нужно использовать пакетные команды в HTTP API для отправки ваших сообщений (если вы этого не хотите). Вы можете отправить миллионы только с api.clickatell.com/http/sendmsg? …. в этом случае нет необходимости делать стартовый пакетный вызов.
Используя что-то вроде SMTP API, вы можете поместить 100 000 сообщений в одно электронное письмо (если вам нужен уникальный текст для каждого сообщения, вы можете использовать пакетную функцию для этого API).
Других решений пока нет …