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实现多服务器共享SESSION数据的方法
Mar 16 PHP
PHP 5.0对象模型深度探索之对象复制
Mar 27 PHP
php 遍历数据表数据并列表横向排列的代码
Sep 05 PHP
PHP 读取和修改大文件的某行内容的代码
Oct 30 PHP
php中修改浏览器的User-Agent来伪装你的浏览器和操作系统
Jul 29 PHP
PHP操作MongoDB GridFS 存储文件的详解
Jun 20 PHP
destoon安全设置中需要设置可写权限的目录及文件
Jun 21 PHP
destoon调用企业会员公司形象图片的实现方法
Aug 21 PHP
基于php的微信公众平台开发入门实例
Apr 15 PHP
通过修改配置真正解决php文件上传大小限制问题(nginx+php)
Sep 23 PHP
PHP实现字符串翻转功能的方法【递归与循环算法】
Nov 03 PHP
php提高脚本性能的4个技巧
Aug 18 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
PHP4实际应用经验篇(2)
2006/10/09 PHP
PHP 日期时间函数的高级应用技巧
2009/10/10 PHP
PHP多维数组遍历方法(2种实现方法)
2015/12/10 PHP
给WordPress的编辑后台添加提示框的代码实例分享
2015/12/25 PHP
Laravel学习笔记之Artisan命令生成自定义模板的方法
2018/11/22 PHP
JavaScript高级程序设计(第3版)学习笔记11 内建js对象
2012/10/11 Javascript
JavaScript中的正则表达式简明总结
2014/04/04 Javascript
seaJs的模块定义和模块加载浅析
2014/06/06 Javascript
javascript实现简单的html5视频播放器
2015/05/06 Javascript
jquery中trigger()无法触发hover事件的解决方法
2015/05/07 Javascript
JavaScript数组的一些奇葩行为
2016/01/25 Javascript
vue2.0实现倒计时的插件(时间戳 刷新 跳转 都不影响)
2017/03/30 Javascript
Node.JS文件系统解析实例详解
2017/05/15 Javascript
JS仿QQ好友列表展开、收缩功能(第一篇)
2017/07/07 Javascript
ES6小技巧之代替lodash
2019/06/07 Javascript
JavaScript创建表格的方法
2020/04/13 Javascript
Vue父子之间值传递的实例教程
2020/07/02 Javascript
解决echarts echarts数据动态更新和dataZoom被重置问题
2020/07/20 Javascript
解决Vue-cli无法编译es6的问题
2020/10/30 Javascript
Vue3+elementui plus创建项目的方法
2020/12/01 Vue.js
python ip正则式
2009/05/07 Python
Python排序搜索基本算法之冒泡排序实例分析
2017/12/09 Python
python中多层嵌套列表的拆分方法
2018/07/02 Python
Python中几种属性访问的区别与用法详解
2018/10/10 Python
一文解决django 2.2与mysql兼容性问题
2020/07/15 Python
用CSS3实现无限循环的无缝滚动的实例代码
2017/07/04 HTML / CSS
英国领先的鞋类零售商:Shoe Zone
2018/12/13 全球购物
Nordgreen美国官网:在线购买极简主义斯堪的纳维亚手表
2019/07/24 全球购物
英国最大的在线快递公司之一:ParcelHero
2019/11/04 全球购物
师范生教师实习自我鉴定
2013/09/27 职场文书
计算机专业推荐信范文
2013/11/20 职场文书
秋季校运动会广播稿
2014/02/23 职场文书
雷锋精神演讲稿
2014/05/13 职场文书
2014乡镇党政班子四风问题思想汇报
2014/09/14 职场文书
小学教师岗位职责
2015/04/02 职场文书
python基于scrapy爬取京东笔记本电脑数据并进行简单处理和分析
2021/04/14 Python