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 相关文章推荐
MySQL修改密码方法总结
Mar 25 PHP
php HandlerSocket的使用
May 02 PHP
php5.3中连接sqlserver2000的两种方法(com与ODBC)
Dec 29 PHP
使用php计算排列组合的方法
Nov 13 PHP
使用PHP函数scandir排除特定目录
Jun 12 PHP
PHP实现批量生成App各种尺寸Logo
Mar 19 PHP
php使用cookie实现记住用户名和密码实现代码
Apr 27 PHP
54个提高PHP程序运行效率的方法
Jul 19 PHP
PHP使用FFmpeg获取视频播放总时长与码率等信息
Sep 13 PHP
php使用json_decode后数字对象转换成了科学计数法的解决方法
Feb 20 PHP
PHP区块查询实现方法分析
May 12 PHP
PHP的mysqli_thread_id()函数讲解
Jan 24 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 中的str_replace 函数总结
2007/04/27 PHP
PHP版网站缓存加快打开速度的方法分享
2012/06/03 PHP
关于更改Zend Studio/Eclipse代码风格主题的介绍
2013/06/23 PHP
如何使用PHP批量去除文件UTF8 BOM信息
2013/08/05 PHP
来自qq的javascript面试题
2010/07/24 Javascript
Node.js:Windows7下搭建的Node.js服务(来玩玩服务器端的javascript吧,这可不是前端js插件)
2011/06/27 Javascript
JQuery学习笔录 简单的JQuery
2012/04/09 Javascript
如何调试异步加载页面里包含的js文件
2014/10/30 Javascript
JS实现全屏的四种写法
2016/12/30 Javascript
jQuery实现可拖动进度条实例代码
2017/06/21 jQuery
基于JavaScript实现无缝滚动效果
2017/07/21 Javascript
通俗解释JavaScript正则表达式快速记忆
2017/08/23 Javascript
微信小程序实现YDUI的ScrollTab组件
2018/02/02 Javascript
mongodb初始化并使用node.js实现mongodb操作封装方法
2019/04/02 Javascript
jQuery+ajax实现批量删除功能完整示例
2019/06/06 jQuery
vue实现瀑布流组件滑动加载更多
2020/03/10 Javascript
JavaScript实现简单的弹窗效果
2020/05/19 Javascript
[01:00:04]DOTA2上海特级锦标赛B组小组赛#1 Alliance VS Spirit第二局
2016/02/26 DOTA
Pandas读取MySQL数据到DataFrame的方法
2018/07/25 Python
python程序 创建多线程过程详解
2019/09/23 Python
Python通过正则库爬取淘宝商品信息代码实例
2020/03/02 Python
python3获取控制台输入的数据的具体实例
2020/08/16 Python
python开根号实例讲解
2020/08/30 Python
详解Python Celery和RabbitMQ实战教程
2021/01/20 Python
设置器与访问器的定义以及各自特点
2016/01/08 面试题
教师演讲稿范文
2014/01/08 职场文书
美术指导求职信
2014/03/17 职场文书
团委竞选演讲稿
2014/04/24 职场文书
农业项目建议书
2014/08/25 职场文书
感谢信怎么写
2015/01/21 职场文书
优秀教师主要事迹材料
2015/11/04 职场文书
MySQL悲观锁与乐观锁的实现方案
2021/11/02 MySQL
MySQL表类型 存储引擎 的选择
2021/11/11 MySQL
Spring Boot实战解决高并发数据入库之 Redis 缓存+MySQL 批量入库问题
2022/02/12 Redis
「SHOW BY ROCK!!」“雫シークレットマインド”组合单曲MV公开
2022/03/21 日漫
python中mongodb包操作数据库
2022/04/19 Python