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中使用Oracle数据库(6)
Oct 09 PHP
第十节--抽象方法和抽象类
Nov 16 PHP
实现 win2003 下 mysql 数据库每天自动备份
Dec 06 PHP
php 文件上传实例代码
Apr 19 PHP
php为字符串前后添加指定数量字符的方法
May 04 PHP
PHP中模拟链表和链表的基本操作示例
Feb 27 PHP
什么是OneThink oneThink后台添加插件步骤
Apr 13 PHP
PHP微信开发用Cache 解决数据缓存
Jul 11 PHP
php中通过eval实现字符串格式的计算公式
Mar 18 PHP
PHP实现的XXTEA加密解密算法示例
Aug 28 PHP
PHP图像处理技术实例总结【绘图、水印、验证码、图像压缩】
Dec 08 PHP
laravel通用化的CURD的实现
Dec 13 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 快速生成 Flash 动画的方法
2007/03/06 PHP
PHP输出数组中重名的元素的几种处理方法
2012/09/05 PHP
php基于websocket搭建简易聊天室实践
2016/10/24 PHP
php反序列化长度变化尾部字符串逃逸(0CTF-2016-piapiapia)
2020/02/15 PHP
深入理解JavaScript系列(1) 编写高质量JavaScript代码的基本要点
2012/01/15 Javascript
基于jQuery的简单九宫格实现代码
2012/08/09 Javascript
javascript放大镜效果的简单实现
2013/12/09 Javascript
js获取字符串字节数方法小结
2015/06/09 Javascript
js简单设置与使用cookie的方法
2016/01/22 Javascript
Bootstrap 粘页脚效果
2016/03/28 Javascript
设置jQueryUI DatePicker默认语言为中文
2016/06/04 Javascript
jQuery Ztree行政地区树状展示(点击加载)
2016/11/09 Javascript
vue中的非父子间的通讯问题简单的实例代码
2017/07/19 Javascript
浅谈react前后端同构渲染
2017/09/20 Javascript
详解VUE2.X过滤器的使用方法
2018/01/11 Javascript
Vue+ElementUI实现表单动态渲染、可视化配置的方法
2018/03/07 Javascript
JavaScript中创建原子的方法总结
2018/08/26 Javascript
vue使用echarts图表的详细方法
2018/10/22 Javascript
vue实现抖音时间转盘
2019/09/08 Javascript
python实现计算资源图标crc值的方法
2014/10/05 Python
python3下实现搜狗AI API的代码示例
2018/04/10 Python
pandas系列之DataFrame 行列数据筛选实例
2018/04/12 Python
python 含子图的gif生成时内存溢出的方法
2019/07/07 Python
Python关键字及可变参数*args,**kw原理解析
2020/04/04 Python
pandas实现导出数据的四种方式
2020/12/13 Python
HTML5中的autofocus(自动聚焦)属性介绍
2014/04/23 HTML / CSS
英国排名第一的最新设计师品牌手表独立零售商:TIC Watches
2016/09/24 全球购物
ToysRus日本官网:玩具反斗城
2018/09/08 全球购物
服务标兵事迹材料
2014/05/04 职场文书
我们的节日春节活动方案
2014/08/22 职场文书
学生保证书
2015/01/16 职场文书
导游欢送词
2015/01/31 职场文书
2015感人爱情寄语
2015/02/26 职场文书
2015学习委员工作总结范文
2015/04/03 职场文书
2015军训通讯稿大全
2015/07/18 职场文书
Golang表示枚举类型的详细讲解
2021/09/04 Golang