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 相关文章推荐
用PHP中的 == 运算符进行字符串比较
Nov 26 PHP
php文件上传的简单实例
Oct 19 PHP
php导出word格式数据的代码实例
Nov 25 PHP
php根据日期判断星座的函数分享
Feb 13 PHP
PHP实现更新中间关联表数据的两种方法
Sep 01 PHP
Yii分页用法实例详解
Dec 04 PHP
PHP获取文件相对路径的方法
Feb 26 PHP
php实现指定字符串中查找子字符串的方法
Mar 17 PHP
PHP输出九九乘法表代码实例
Mar 27 PHP
php中file_exists函数使用详解
May 08 PHP
PHP中使用array函数新建一个数组
Nov 19 PHP
非常重要的php正则表达式详解
Jan 04 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
基于php上传图片重命名的6种解决方法的详细介绍
2013/04/28 PHP
PHP设置头信息及取得返回头信息的方法
2016/01/25 PHP
关于取不到由location.href提交而来的上级页面地址的解决办法
2009/07/30 Javascript
基于Jquery的标签智能验证实现代码
2010/12/27 Javascript
jquery中的事件处理详细介绍
2013/06/24 Javascript
jQuery扁平化风格下拉框美化插件FancySelect使用指南
2015/02/10 Javascript
innerHTML中标签可以换行的方法汇总
2015/08/14 Javascript
javascript创建cookie、读取cookie
2016/03/31 Javascript
基于VUE选择上传图片并页面显示(图片可删除)
2017/05/25 Javascript
详解Angular Reactive Form 表单验证
2017/07/06 Javascript
vue实现重置表单信息为空的方法
2018/09/29 Javascript
vueScroll实现移动端下拉刷新、上拉加载
2019/03/22 Javascript
element-ui 文件上传修改文件名的方法示例
2019/11/05 Javascript
Vue.js 无限滚动列表性能优化方案
2019/12/02 Javascript
JS实现关闭小广告特效
2021/01/29 Javascript
[54:09]RNG vs Liquid 2019国际邀请赛淘汰赛 败者组 BO3 第一场 8.23
2019/09/05 DOTA
PyMongo安装使用笔记
2015/04/27 Python
详解Python的单元测试
2015/04/28 Python
Python虚拟环境virtualenv的安装与使用详解
2017/05/28 Python
Python图片裁剪实例代码(如头像裁剪)
2017/06/21 Python
python docx 中文字体设置的操作方法
2018/05/08 Python
Python 16进制与中文相互转换的实现方法
2018/07/09 Python
python中时间、日期、时间戳的转换的实现方法
2019/07/06 Python
详解Pandas之容易让人混淆的行选择和列选择
2019/07/10 Python
Python爬虫库BeautifulSoup的介绍与简单使用实例
2020/01/25 Python
PyCharm如何导入python项目的方法
2020/02/06 Python
美国非常受欢迎的Spa品牌:Bliss必列斯
2018/04/10 全球购物
KIKO MILANO西班牙官网:意大利领先的化妆品和护肤品品牌
2019/05/03 全球购物
盛大二次面试题
2016/11/18 面试题
竞聘演讲稿范文
2014/01/12 职场文书
秋季运动会广播稿(30篇)
2014/09/13 职场文书
放弃继承权公证书
2015/01/23 职场文书
Oracle设置DB、监听和EM开机启动的方法
2021/04/25 Oracle
教你快速开启Apache SkyWalking的自监控
2021/04/25 Servers
python析构函数用法及注意事项
2021/06/22 Python
Python中Schedule模块使用详解 周期任务神器
2022/04/19 Python