>我有一个短信API,可以发送短信。我想用它来批量发送短信。
用户一次最多可以输入30,000个号码并发送短信。我正在使用的方法可能是一个非常糟糕的方法:
foreach ($targets as $target) {
sendSms($target,$text,$extra_parms):
}
处理 10,000 个请求 (SMS) 需要 10 分钟,而且太多了。我想要的是当用户应该单击"发送"按钮时,他应该收到如下消息:
"您的短信已添加到要发送的队列中"
并且所有短信都应在后台发送。我该怎么做?
感谢您的帮助。
遵循以程:
- 而不是直接调用 API,将所有数据插入您的数据库。
- 在数据库中添加数字和文本后,显示用户消息"您的短信已添加到要发送的队列中"
- 用户后台进程,它将从数据库获取数据并使用 http://www.php.net/manual/en/function.curl-multi-exec.php 调用异步 API 请求
- 更新/删除数据库中已处理的API记录,以便下次只能获取未处理的数据。
请注意:正常的 CURL 请求使用同步,它会等待响应,这会延迟。
创建队列,即在数据库中,并将所有SMS操作放在那里。创建单独的脚本来发送SMS(批量发送,就像整个一样),并定期启动(即使用Curl)来处理您的队列。
这就是我使用的:
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是一个数组。