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自动跳转中英文页面
Jul 29 PHP
PHP 年龄计算函数(精确到天)
Jun 07 PHP
nginx+php-fpm配置文件的组织结构介绍
Nov 07 PHP
Mysql的Root密码忘记,查看或修改的解决方法(图文介绍)
Jun 14 PHP
设置php页面编码的两种方法示例介绍
Mar 03 PHP
PHP中对于浮点型的数据需要用不同的方法解决
Mar 11 PHP
php中heredoc与nowdoc介绍
Dec 25 PHP
PHP执行SQL文件并将SQL文件导入到数据库
Sep 17 PHP
PHP在linux上执行外部命令的方法
Feb 06 PHP
浅谈PHP中类和对象的相关函数
Apr 26 PHP
vmware linux系统安装最新的php7图解
Apr 14 PHP
Laravel框架实现抢红包功能示例
Oct 31 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维护文件系统
2006/10/09 PHP
PHP通用分页类page.php[仿google分页]
2008/08/31 PHP
PHP 文件扩展名 获取函数
2009/06/03 PHP
php读取图片内容并输出到浏览器的实现代码
2013/08/08 PHP
php错误日志简单配置方法
2016/07/11 PHP
PHP面向对象程序设计高级特性详解(接口,继承,抽象类,析构,克隆等)
2016/12/02 PHP
php session_decode函数用法讲解
2019/05/26 PHP
web 页面分页打印的实现
2009/06/22 Javascript
cookie在javascript中的使用技巧以及隐私在服务器端的设置
2012/12/03 Javascript
JavaScript实现在数组中查找不同顺序排列的字符串
2014/09/26 Javascript
浏览器检测JS代码(兼容目前各大主流浏览器)
2016/02/21 Javascript
jQuery拖拽排序插件制作拖拽排序效果(附源码下载)
2016/02/23 Javascript
Js自定义多选框效果的实例代码
2017/07/05 Javascript
使用vue-aplayer插件时出现的问题的解决
2018/03/02 Javascript
vue移动端UI框架实现QQ侧边菜单组件
2018/03/09 Javascript
React中的render何时执行过程
2018/04/13 Javascript
[03:36]DOTA2完美大师赛coL战队趣味视频——我演你猜
2017/11/23 DOTA
[57:36]DOTA2-DPC中国联赛 正赛 SAG vs CDEC BO3 第三场 2月1日
2021/03/11 DOTA
python logging类库使用例子
2014/11/22 Python
Python中设置变量访问权限的方法
2015/04/27 Python
Python实现中文数字转换为阿拉伯数字的方法示例
2017/05/26 Python
Windows环境下python环境安装使用图文教程
2018/03/13 Python
Python设计模式之命令模式原理与用法实例分析
2019/01/11 Python
利用ImageAI库只需几行python代码实现目标检测
2019/08/09 Python
Python实现二叉树的最小深度的两种方法
2019/09/30 Python
Django 博客实现简单的全文搜索的示例代码
2020/02/17 Python
Python爬虫与反爬虫大战
2020/07/30 Python
详解Anaconda 的安装教程
2020/09/23 Python
Python 串口通信的实现
2020/09/29 Python
DC Shoes官网:美国滑板鞋和服饰品牌
2017/09/03 全球购物
领导调研接待方案
2014/02/27 职场文书
布达拉宫的导游词
2015/02/02 职场文书
2015年五四青年节演讲稿
2015/03/18 职场文书
计算机教师工作总结
2015/08/13 职场文书
个人工作总结(管理人员)范文
2019/08/13 职场文书
nginx 防盗链防爬虫配置详解
2021/03/31 Servers