2014-11-27 2 views
0

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

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

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

Это займет 10 минут, чтобы обрабатывать 10000 запросов (SMSS), и это слишком много. То, что я хочу, когда пользователь должен нажать «Отправить» кнопка, он должен получить сообщение типа:

«было добавлены в очередь Вашего SMS (ы), чтобы быть отправленным»

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

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

+1

Немного слишком широкое, но хорошее место для начала - cronjob – Raptor

+0

Посмотрите на эти ответы: http://stackoverflow.com/questions/3515615/php-background-process – mirelon

+0

Существует много [менеджеров очереди] (http: //stackoverflow.com/questions/659455/what-are-some-good-distributed-queue-managers-in-php), которые вы могли бы использовать для этой задачи. Это очень общая проблема, и существует множество библиотек, серверов и служб, больших и малых, предназначенных для решения этой проблемы. Основной шаблон: «веб-страница быстро добавляет 10 000 заданий на работу в очередь»/«какая-то другая ферма процессов/серверов/серверов проходит через них и фактически отправляет их», но как сделать это в вашем конкретном случае, слишком большой вопрос, чтобы ответить здесь, я бы сказал. –

ответ

-1

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

-2

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

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); 
} 

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

0

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

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

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

Смежные вопросы