PHP+MySQL实现消息队列的方法分析


Posted in PHP onMay 09, 2018

本文实例讲述了PHP+MySQL实现消息队列的方法。分享给大家供大家参考,具体如下:

最近遇到一个批量发送短信的需求,短信接口是第三方提供的。刚开始想到,获取到手机号之后,循环调用接口发送不就可以了吗?

但很快发现问题:当短信数量很大时,不仅耗时,而且成功率很低。

于是想到,用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、成功率高,失败的记录会自动重发,直到成功

希望本文所述对大家PHP程序设计有所帮助。

PHP 相关文章推荐
php中$this-&amp;gt;含义分析
Nov 29 PHP
使用PHP备份MYSQL数据的多种方法
Jan 15 PHP
PHP按行读取文件时删除换行符的3种方法
May 04 PHP
php调用nginx的mod_zip模块打包ZIP文件
Jun 11 PHP
从零开始学YII2框架(四)扩展插件yii2-kartikgii
Aug 20 PHP
PHP速成大法
Jan 30 PHP
PHP获取数组最大值下标的方法
May 12 PHP
PHP实现基于mysqli的Model基类完整实例
Apr 08 PHP
PHP实现向关联数组指定的Key之前插入元素的方法
Jun 06 PHP
PHP中ltrim()函数的用法与实例讲解
Mar 28 PHP
PHP反射实际应用示例
Apr 03 PHP
解决laravel 表单提交-POST 异常的问题
Oct 15 PHP
PHP共享内存使用与信号控制实例分析
May 09 #PHP
php curl批处理实现可控并发异步操作示例
May 09 #PHP
php使用curl伪造来源ip和refer的方法示例
May 08 #PHP
PHP+ajax实现获取新闻数据简单示例
May 08 #PHP
PHP 计算两个特别大的整数实例代码
May 07 #PHP
详解PHP发送邮件知识点
May 06 #PHP
PHP学习笔记之session
May 06 #PHP
You might like
php一个解析字符串排列数组的方法
2015/05/12 PHP
使用laravel的Eloquent模型如何获取数据库的指定列
2019/10/17 PHP
用jquery ajax获取网站Alexa排名的代码
2009/12/12 Javascript
javascript控制frame,iframe的src属性代码
2009/12/31 Javascript
JS 进度条效果实现代码整理
2011/05/21 Javascript
读jQuery之七 判断点击了鼠标哪个键的代码
2011/06/21 Javascript
JQuery 使用attr方法实现下拉列表选中
2014/10/13 Javascript
JavaScript中的slice()方法使用详解
2015/06/06 Javascript
Jquery+ajax+JAVA(servlet)实现下拉菜单异步取值
2016/03/23 Javascript
纯JS打造网页中checkbox和radio的美化效果
2016/10/13 Javascript
JS获取本周周一,周末及获取任意时间的周一周末功能示例
2017/02/09 Javascript
详解axios在vue中的简单配置与使用
2017/05/10 Javascript
Nodejs回调加超时限制两种实现方法
2017/06/09 NodeJs
template.js前端模板引擎使用详解
2017/10/10 Javascript
Vue指令指令大全
2019/02/09 Javascript
解决layer弹出层中表单不起作用的问题
2019/09/09 Javascript
如何检测JavaScript中的死循环示例详解
2020/08/30 Javascript
js实现简单的无缝轮播效果
2020/09/05 Javascript
在Python的Django框架中调用方法和处理无效变量
2015/07/15 Python
python使用str &amp; repr转换字符串
2016/10/13 Python
浅谈Django REST Framework限速
2017/12/12 Python
python3.x实现发送邮件功能
2018/05/22 Python
Django使用AJAX调用自己写的API接口的方法
2019/03/06 Python
浅谈python opencv对图像颜色通道进行加减操作溢出
2020/06/03 Python
Python如何定义有默认参数的函数
2020/08/10 Python
澳大利亚UGG工厂直销:Australian Ugg Boots
2017/10/14 全球购物
彪马英国官网:PUMA英国
2019/02/11 全球购物
Bose美国官网:购买Bose耳机和音箱
2019/03/10 全球购物
Sahajan美国:阿育吠陀护肤品牌
2021/01/09 全球购物
外语系毕业生找工作的求职信
2013/11/28 职场文书
员工拓展培训方案
2014/02/15 职场文书
孝老爱亲模范事迹材料
2014/05/25 职场文书
人代会标语
2014/06/30 职场文书
社区护士演讲稿
2014/08/27 职场文书
2015中秋节慰问信范文
2015/03/23 职场文书
使用 JavaScript 制作页面效果
2021/04/21 Javascript