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实现ping
Oct 09 PHP
如何跨站抓取别的站点的页面的补充
Oct 09 PHP
PHP下用rmdir实现删除目录的三种方法小结
Apr 20 PHP
解析php DOMElement 操作xml 文档的实现代码
May 10 PHP
php实现获取文章内容第一张图片的方法
Nov 04 PHP
PHP实现将视频转成MP4并获取视频预览图的方法
Mar 12 PHP
php计算税后工资的方法
Jul 28 PHP
PHP编写RESTful接口
Feb 23 PHP
基于PHP生成简单的验证码
Jun 01 PHP
PHP判断访客是否手机端(移动端浏览器)访问的方法总结【4种方法】
Mar 27 PHP
微信公众平台开发教程⑤ 微信扫码支付模式介绍
Apr 10 PHP
Thinkphp5.0框架使用模型Model的获取器、修改器、软删除数据操作示例
Oct 11 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 和 XML: 使用expat函数(二)
2006/10/09 PHP
关于shopex同步ucenter的redirect问题,导致script不运行
2013/04/10 PHP
一个简单的php加密解密函数(动态加密)
2013/06/19 PHP
PHP aes (ecb)解密后乱码问题
2015/06/22 PHP
php抓取并保存网站图片的实现代码
2015/10/28 PHP
PHP正则表达式匹配替换与分割功能实例浅析
2017/02/04 PHP
PHP读取Excel类文件
2017/05/15 PHP
php post json参数的传递和接收处理方法
2018/05/31 PHP
JavaScript QueryString解析类代码
2010/01/17 Javascript
JavaScript实现动态添加,删除行的方法实例详解
2015/07/02 Javascript
通过vue-cli来学习修改Webpack多环境配置和发布问题
2017/12/22 Javascript
JS实现方形抽奖效果
2018/08/27 Javascript
解决webpack多页面内存溢出的方法示例
2019/10/08 Javascript
Vue常用的全选/反选的示例代码
2020/02/19 Javascript
详解JavaScript之ES5的继承
2020/07/08 Javascript
vue实现公共方法抽离
2020/07/31 Javascript
解决vue打包报错Unexpected token: punc的问题
2020/10/24 Javascript
javascript实现随机抽奖功能
2020/12/30 Javascript
深入理解python函数递归和生成器
2016/06/06 Python
python自动发送邮件脚本
2018/06/20 Python
Python实现登陆文件验证方法
2018/10/06 Python
浅谈python下tiff图像的读取和保存方法
2018/12/04 Python
django-利用session机制实现唯一登录的例子
2020/03/16 Python
基于Python把网站域名解析成ip地址
2020/05/25 Python
使用pytorch 筛选出一定范围的值
2020/06/28 Python
利用CSS3实现自定义滚动条代码分享
2016/08/18 HTML / CSS
一款CSS3实现多功能下拉菜单(带分享按)的教程
2014/11/05 HTML / CSS
HTML5通用接口详解
2016/06/12 HTML / CSS
描述一下JVM加载class文件的原理机制
2013/12/08 面试题
电脑专业个人求职信范文
2014/02/04 职场文书
三年级小学生评语
2014/04/22 职场文书
禁毒宣传工作方案
2014/05/23 职场文书
商务经理岗位职责
2014/07/30 职场文书
基层干部个人对照检查及整改措施
2014/10/28 职场文书
个人工作总结怎么写?
2019/04/09 职场文书
CocosCreator ScrollView优化系列之分帧加载
2021/04/14 Python