PHP swoole和redis异步任务实现方法分析


Posted in PHP onAugust 12, 2019

本文实例讲述了PHP swoole和redis异步任务实现方法。分享给大家供大家参考,具体如下:

redis异步任务

interface.php

<?php
for($i=0;$i<100;$i++){
  $msg = "zhezhao[".$i."]";
  $redis = new Redis();
  $redis->connect("127.0.0.1");
  $redis->publish("test",$msg);
  $redis->close();
}

handler.php

<?php
$redis = new Redis();
$redis->connect("127.0.0.1");
$redis->subscribe(array("test"), 'handleFun');
function handleFun($redis, $chan, $data) {
  write($data);
}
function write($data){
  $path = "/tmp/mailList-redis.log";
  $str = "[".date("Y-m-d H:i:s")."]".$data;
  $str .= PHP_EOL;
  file_put_contents($path,$str,FILE_APPEND);
}

swoole异步任务

interface.php

<?php
for($i=0;$i<100;$i++){
  $msg = "zhezhao[".$i."]";
  $client = new swoole_client(SWOOLE_SOCK_TCP);
  $client->connect('127.0.0.1', 9501, 0.5);
  $client->send($msg);
  $client->close();
}

handler.php

<?php
$serv = new swoole_server("127.0.0.1", 9501);
$serv->set(array('task_worker_num' => 4));
$serv->on('receive', function($serv, $fd, $from_id, $data) {
  $task_id = $serv->task($data);
});
$serv->on('task', function ($serv, $task_id, $from_id, $data) {
  handle($data);
  $serv->finish($data);
});
$serv->start();
function handle($data){
  sleep(2);
  mailLog("Send Mail successfully to $data");
}
function mailLog($str){
  $path = "/tmp/mailList.log";
  $str = "[".date("Y-m-d H:i:s")."]".$str;
  $str .= PHP_EOL;
  file_put_contents($path,$str,FILE_APPEND);
}

比较

redis异步任务日志

PHP swoole和redis异步任务实现方法分析

swoole异步任务日志

PHP swoole和redis异步任务实现方法分析

通过对比任务日志我们可以看到,由于swoole开了4个进程执行异步任务,所以处理异步任务的效率大概是redis的四倍,如果swoole只开一个进程的话,效率和redis几乎没有什么差别。

希望本文所述对大家PHP程序设计有所帮助。

PHP 相关文章推荐
攻克CakePHP系列一 连接MySQL数据库
Oct 22 PHP
php strcmp使用说明
Apr 22 PHP
php单例模式实现(对象只被创建一次)
Dec 05 PHP
PHP解析html类库simple_html_dom的转码bug
May 22 PHP
一个非常完美的读写ini格式的PHP配置类分享
Feb 12 PHP
YiiFramework入门知识点总结(图文教程)
Dec 28 PHP
PHP支付系统设计与典型案例分享
Aug 02 PHP
Yii2实现上下联动下拉框功能的方法
Aug 10 PHP
用PHP去掉文件头的Unicode签名(BOM)方法
Jun 22 PHP
PHP实现重载的常用方法实例详解
Oct 18 PHP
php微信公众号开发之音乐信息
Oct 20 PHP
Laravel框架源码解析之反射的使用详解
May 14 PHP
php使用pecl方式安装扩展操作示例
Aug 12 #PHP
PHP实现与java 通信的插件使用教程
Aug 11 #PHP
PHP利用DWZ.CN服务生成短网址
Aug 11 #PHP
thinkPHP和onethink微信支付插件分享
Aug 11 #PHP
PHP基于session.upload_progress 实现文件上传进度显示功能详解
Aug 09 #PHP
PHP实现提高SESSION响应速度的几种方法详解
Aug 09 #PHP
php tpl模板引擎定义与使用示例
Aug 09 #PHP
You might like
用DBSQL类加快开发MySQL数据库程序的速度
2006/10/09 PHP
PHP中创建和编辑Excel表格的方法
2018/09/13 PHP
wordpress自定义标签云与随机获取标签的方法详解
2019/03/22 PHP
zShowBox 图片放大展示jquery版 兼容性
2011/09/24 Javascript
JavaScript实现维吉尼亚(Vigenere)密码算法实例
2013/11/22 Javascript
jQuery截取指定长度字符串代码
2014/08/21 Javascript
原生javascript获取元素样式
2014/12/31 Javascript
jQuery实现的支持IE的html滑动条
2015/03/16 Javascript
微信小程序技巧之show内容展示,上传文件编码问题
2017/01/23 Javascript
Nuxt.js踩坑总结分享
2018/01/18 Javascript
使用Vue写一个datepicker的示例
2018/01/27 Javascript
jquery 实现拖动文件上传加载进度条功能
2018/03/18 jQuery
js合并两个数组生成合并后的key:value数组
2018/05/09 Javascript
vue-router+nginx 非根路径配置方法
2018/06/30 Javascript
微信小程序新手教程之页面打开数量限制
2019/03/03 Javascript
详解Vue项目引入CreateJS的方法(亲测可用)
2019/05/30 Javascript
这应该是最详细的响应式系统讲解了
2019/07/22 Javascript
js+html实现点名系统功能
2019/11/05 Javascript
详解实现vue的数据响应式原理
2021/01/20 Vue.js
[56:00]DOTA2上海特级锦标赛主赛事日 - 4 胜者组决赛Secret VS Liquid第一局
2016/03/05 DOTA
[01:16]DOTA2小知识课堂 Ep.03 芒果树无伤肉山
2019/12/05 DOTA
python解析json实例方法
2013/11/19 Python
python中sets模块的用法实例
2014/09/30 Python
Python之父谈Python的未来形式
2016/07/01 Python
Python 控制终端输出文字的实例
2019/07/12 Python
Python Selenium 设置元素等待的三种方式
2020/03/18 Python
使用python matplotlib 画图导入到word中如何保证分辨率
2020/04/16 Python
python实现时间序列自相关图(acf)、偏自相关图(pacf)教程
2020/06/03 Python
详解numpy.ndarray.reshape()函数的参数问题
2020/10/13 Python
HTML5 预加载让页面得以快速呈现
2013/08/13 HTML / CSS
Kathmandu英国网站:新西兰户外运动品牌
2017/03/27 全球购物
热爱祖国的演讲稿
2014/05/04 职场文书
机关保密承诺书
2014/06/03 职场文书
个人委托书如何写
2014/09/25 职场文书
本科毕业论文答辩稿
2015/06/23 职场文书
董事长开业致辞
2015/07/29 职场文书