但很快發現問題:當短信數量很大時,不僅耗時,而且成功率很低。
於是想到,用PHP和MySQL實現壹個消息隊列,壹條壹條的發送短信。下面介紹具體的實現方法:
首先,建立壹個數據表sms,包含以下字段:
id,
phone, //手機號
content //短信內容
將需要發送的短信和手機號存入sms表中。
接下來,需要用PHP實現壹個定時器,定時讀取壹條記錄,並發送短信:
<?php
$db = new Db();
$sms = new Sms();
while(true){
$item = $db->getFirstRecord(); //獲取數據表第壹條記錄
if(!$item){
//如果隊列中沒有數據,則結束定時器
break;
}
$res = $sms->send($item['phone'],$item['content']); //發送短信
if($res){
$db->deleteFristRecord(); //刪除發送成功的記錄
echo $item['phone'].'發送成功';
}else{
echo $item['phone'].'發送失敗,稍後繼續嘗試';
}
sleep(10); //每隔十秒循環壹次
}
echo '發送完畢!';
>將代碼保存為timer_sms.php,打開命令行,執行定時器:
php timer_sms.php
好了,php定時器將會根據設定的時間間隔(這裏設的是10秒),自動完成發送短信的任務。任務完成後將自動退出定時器,不再占用服務器資源。
根據我的測試,PHP定時器占用資源並不多,不會對服務器造成壓力。而且是異步訪問數據庫,也不會影響數據庫的運行。
這種方式的優點是:
1、後臺運行,前臺無需等待
2、成功率高,失敗的記錄會自動重發,直到成功