设为首页 - 加入收藏 ASP站长网(Aspzz.Cn)- 科技、建站、经验、云计算、5G、大数据,站长网!
热搜: 手机 数据 公司
当前位置: 首页 > 站长学院 > PHP教程 > 正文

细解PHP使用gearman进行异步的邮件或短信发送操作

发布时间:2022-07-18 12:09 所属栏目:121 来源:互联网
导读:本文实例讲述了PHP使用gearman进行异步的邮件或短信发送操作。分享给大家供大家参考,具体如下: 一、准备工作 1、为了防止,处理业务途中出现的宕机,请配置好gearman的持久化方式。 2、使用gearmanManager来管理我们的worker脚本,方便测试。 二、编写测试
  本文实例讲述了PHP使用gearman进行异步的邮件或短信发送操作。分享给大家供大家参考,具体如下:
 
  一、准备工作
 
  1、为了防止,处理业务途中出现的宕机,请配置好gearman的持久化方式。
 
  2、使用gearmanManager来管理我们的worker脚本,方便测试。
 
  二、编写测试脚本
 
  sendEmail.php代码如下:
 
  <?php
 
  //注意函数名与文件名相同
 
  function sendEmail($job) {
 
    $workId = uniqid();

    //workload()获取客户端发送来的序列化数据

    $data = json_decode($job->workload(), true);

    //这里模拟处理过程
 
    //具体的业务,这里应该是请求发送邮件的接口,这里只做演示
 
    sleep(1);
 
    echo "workId: {$workId} 发送 {$data['email']} 成功\n";
 
  }
 
  client.php代码如下:
 
  <?php
 
  //创建一个客户端
 
  $client = new GearmanClient();
 
  //添加一个job服务
 
  $client->addServer('127.0.0.1', 4730);
 
  $cnt = 5000;

  $ret = array();
 
  //循环发送5000条邮件
 
  for($i = 0; $i < $cnt; ++$i) {
 
    //doBackground异步,返回提交任务的句柄

    $ret[$i] = $client->doBackground('sendEmail', json_encode(array(
 
      'email' => "{$i}@qq.com",

      'title' => "邮件标题{$i}",
 
      'body' => "我是内容{$i}",

    )));

  }
 
  三、修改gearmanManager中配置信息
 
  我的gearmanManager是安装在/data/GearmanManager/下
 
  > vi /data/GearmanManager/etc/GearmanManager.ini
 
  添加如下信息,我们为sendEmail启动五个进程
 
  [sendEmail]
 
  ;指定5个进程
 
  dedicated_count=5
 
  ;5个进程都只做sendEmail工作
 
  dedicated_only=1
 
  四、启动gearman
 
  > gearmand -d -q mysql \
 
  --mysql-host=192.168.1.100 \
 
  --mysql-port=3306 \
 
  --mysql-user=gearman \
 
  --mysql-password=123456 \
 
  --mysql-db=gearman \

  --mysql-table=gearman_queue &
 
  五、启动gearmanManager
 
  > cd /data/GearmanManager
 
  > ./bin/pecl_manager.php -c /data/GearmanManager/etc/GearmanManager.ini -vvv
 
  详解PHP使用gearman进行异步的邮件或短信发送操作
 
  六、运行client.php
 
  > /data/php56/bin/php /data/client.php
 
  详解PHP使用gearman进行异步的邮件或短信发送操作
 
  当我们对pecl_manager.php进行ctrl+c时,强行关闭worker,client.php那边仍可正常的发送请求,不过数据都被保存在了mysql中。
 
  当我们重新把worker启动时,gearman会重新载入没有处理的进行处理。
 
  详解PHP使用gearman进行异步的邮件或短信发送操作
 
  我的mysql是装在主机的,虚拟机里装了gearman,如果有朋友发现gearman无法连接mysql,可暂时关闭win10防火墙,和开启win10被ping的回显。
 

(编辑:ASP站长网)

    网友评论
    推荐文章
      热点阅读