curl — php — как сделать асинхронный Обработка для добавления задач в очередь?

У меня есть SMS API, который позволяет отправлять текстовые сообщения. Я хочу использовать его для отправки смс оптом.

Пользователь может ввести до 30 000 номеров одновременно и отправлять SMS. То, что я использую, может быть очень плохим подходом:

foreach ($targets as $target) {
sendSms($target,$text,$extra_parms):
}

Для обработки 10 000 запросов (SMS) требуется 10 минут, и это слишком много. Я хочу, чтобы пользователь нажимал кнопку «Отправить» и получал следующее сообщение:

«Ваши SMS были добавлены в очередь для отправки»

И все смс должны быть отправлены в фоновом режиме. Как я могу это сделать?

Спасибо за помощь.

0

Решение

Следуйте ниже Процесс:

  • Вместо прямого вызова API вставьте все данные в свой
    база данных.
  • Как только цифры и текст добавлены в вашу БД, покажите сообщение пользователя
    «Ваши SMS были добавлены в очередь для отправки»
  • Фоновый процесс пользователя, который будет принимать данные из БД и вызывать асинхронные запросы API, используя http://www.php.net/manual/en/function.curl-multi-exec.php
  • Обновите / удалите обработанные записи API в базе данных, чтобы в следующий раз вы могли получать только те данные, которые не были обработаны.

Обратите внимание: обычный запрос CURL использует синхронный режим и ожидает ответа, который вызывает задержку.

0

Другие решения

Создайте очередь, т. Е. В базе данных, и поместите туда все свои SMS-действия. Создайте отдельный скрипт, который будет отправлять SMS-сообщения (в пакетном режиме, как угодно) и периодически запускать его (т. Е. С помощью Curl) для обработки вашей очереди.

-1

Вот что я использую:

function fast_post($url,$data){
ignore_user_abort(true);
$ch = curl_init();
$defaults = array(
CURLOPT_POST => 1,
CURLOPT_HEADER => 0,
CURLOPT_URL => $url,
CURLOPT_FRESH_CONNECT => 1,
CURLOPT_RETURNTRANSFER => 1,
CURLOPT_FORBID_REUSE => 1,
CURLOPT_TIMEOUT => 1,
CURLOPT_POSTFIELDS => http_build_query($data)
);
curl_setopt_array($ch, $defaults);
curl_exec($ch);
curl_close($ch);
}

Обратите внимание, что в этой функции $ data является массивом.

-2
По вопросам рекламы [email protected]