国产探花免费观看_亚洲丰满少妇自慰呻吟_97日韩有码在线_资源在线日韩欧美_一区二区精品毛片,辰东完美世界有声小说,欢乐颂第一季,yy玄幻小说排行榜完本

首頁(yè) > 語(yǔ)言 > PHP > 正文

PHP+MySQL實(shí)現(xiàn)消息隊(duì)列的方法分析

2024-05-05 00:03:36
字體:
來(lái)源:轉(zhuǎn)載
供稿:網(wǎng)友

本文實(shí)例講述了PHP+MySQL實(shí)現(xiàn)消息隊(duì)列的方法。分享給大家供大家參考,具體如下:

最近遇到一個(gè)批量發(fā)送短信的需求,短信接口是第三方提供的。剛開(kāi)始想到,獲取到手機(jī)號(hào)之后,循環(huán)調(diào)用接口發(fā)送不就可以了嗎?

但很快發(fā)現(xiàn)問(wèn)題:當(dāng)短信數(shù)量很大時(shí),不僅耗時(shí),而且成功率很低。

于是想到,用PHP和MySQL實(shí)現(xiàn)一個(gè)消息隊(duì)列,一條一條的發(fā)送短信。下面介紹具體的實(shí)現(xiàn)方法:

首先,建立一個(gè)數(shù)據(jù)表sms,包含以下字段:

id,
phone, //手機(jī)號(hào)
content //短信內(nèi)容

將需要發(fā)送的短信和手機(jī)號(hào)存入sms表中。

接下來(lái),需要用PHP實(shí)現(xiàn)一個(gè)定時(shí)器,定時(shí)讀取一條記錄,并發(fā)送短信:

<?php$db = new Db();$sms = new Sms();while(true){  $item = $db->getFirstRecord(); //獲取數(shù)據(jù)表第一條記錄  if(!$item){    //如果隊(duì)列中沒(méi)有數(shù)據(jù),則結(jié)束定時(shí)器    break;  }  $res = $sms->send($item['phone'],$item['content']); //發(fā)送短信  if($res){    $db->deleteFristRecord(); //刪除發(fā)送成功的記錄    echo $item['phone'].'發(fā)送成功';  }else{    echo $item['phone'].'發(fā)送失敗,稍后繼續(xù)嘗試';  }  sleep(10); //每隔十秒循環(huán)一次}echo '發(fā)送完畢!';?>

將代碼保存為timer_sms.php,打開(kāi)命令行,執(zhí)行定時(shí)器:

php timer_sms.php

好了,php定時(shí)器將會(huì)根據(jù)設(shè)定的時(shí)間間隔(這里設(shè)的是10秒),自動(dòng)完成發(fā)送短信的任務(wù)。任務(wù)完成后將自動(dòng)退出定時(shí)器,不再占用服務(wù)器資源。

根據(jù)我的測(cè)試,PHP定時(shí)器占用資源并不多,不會(huì)對(duì)服務(wù)器造成壓力。而且是異步訪問(wèn)數(shù)據(jù)庫(kù),也不會(huì)影響數(shù)據(jù)庫(kù)的運(yùn)行。

這種方式的優(yōu)點(diǎn)是:

1、后臺(tái)運(yùn)行,前臺(tái)無(wú)需等待

2、成功率高,失敗的記錄會(huì)自動(dòng)重發(fā),直到成功

希望本文所述對(duì)大家PHP程序設(shè)計(jì)有所幫助。


注:相關(guān)教程知識(shí)閱讀請(qǐng)移步到PHP教程頻道。
發(fā)表評(píng)論 共有條評(píng)論
用戶名: 密碼:
驗(yàn)證碼: 匿名發(fā)表

圖片精選

主站蜘蛛池模板: 铁力市| 隆昌县| 云安县| 方正县| 会同县| 龙海市| 岐山县| 江津市| 南阳市| 监利县| 江津市| 万载县| 太康县| 垦利县| 东乌珠穆沁旗| 马龙县| 万年县| 朝阳市| 兰州市| 阳朔县| 泾阳县| 岳普湖县| 宕昌县| 临清市| 锦屏县| 新密市| 东安县| 华容县| 黄大仙区| 沙田区| 三穗县| 奉新县| 乾安县| 吉林省| 双流县| 香港| 河北区| 抚远县| 公安县| 公安县| 固始县|