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 相关文章推荐
改进的IP计数器
Oct 09 PHP
一个简单的MySQL数据浏览器
Oct 09 PHP
如何使用php绘制在图片上的正余弦曲线
Jun 08 PHP
深入file_get_contents函数抓取内容失败的原因分析
Jun 25 PHP
php class类的用法详细总结
Oct 17 PHP
php生成随机字符串可指定纯数字、纯字母或者混合的
Apr 18 PHP
php上传文件常见问题总结
Feb 03 PHP
php从csv文件读取数据并输出到网页的方法
Mar 14 PHP
php模板引擎技术简单实现
Mar 15 PHP
Laravel5.1数据库连接、创建数据库、创建model及创建控制器的方法
Mar 29 PHP
php语言注释,单行注释和多行注释
Jan 21 PHP
php命令行写shell实例详解
Jul 19 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公用函数列表[正则]
2007/02/22 PHP
PHP程序员最常犯的11个MySQL错误小结
2010/11/20 PHP
php类常量用法实例分析
2015/07/09 PHP
yii2中添加验证码的实现方法
2016/01/09 PHP
jQuery中(function(){})()执行顺序的理解
2013/03/05 Javascript
根据经纬度计算地球上两点之间的距离js实现代码
2013/03/05 Javascript
JS中 用户登录系统的解决办法
2013/04/15 Javascript
基于jquery实现一张图片点击鼠标放大再点缩小
2013/09/29 Javascript
详细分析JavaScript函数定义
2015/07/16 Javascript
关于input全选反选恶心的异常情况
2016/07/24 Javascript
Angular 理解module和injector,即依赖注入
2016/09/07 Javascript
详解使用fetch发送post请求时的参数处理
2017/04/05 Javascript
解决vue 项目引入字体图标报错、不显示等问题
2018/09/01 Javascript
angularJS自定义directive之带参方法传递详解
2018/10/09 Javascript
解决在Vue中使用axios用form表单出现的问题
2019/10/30 Javascript
vuex实现购物车的增加减少移除
2020/06/28 Javascript
Openlayers绘制聚合标注
2020/09/28 Javascript
python中元类用法实例
2014/10/10 Python
对于Python中RawString的理解介绍
2016/07/07 Python
Python中单、双下划线的区别总结
2017/12/01 Python
Sanic框架配置操作分析
2018/07/17 Python
Python3数字求和的实例
2019/02/19 Python
python 实现将文件或文件夹用相对路径打包为 tar.gz 文件的方法
2019/06/10 Python
python对csv文件追加写入列的方法
2019/08/01 Python
借助HTML5 Canvas来绘制三角形和矩形等多边形的方法
2016/03/14 HTML / CSS
HTML5开发动态音频图的实现
2020/07/02 HTML / CSS
美国在线宠物用品商店:Entirely Pets
2017/01/01 全球购物
Origins悦木之源香港官网:雅诗兰黛集团高端植物护肤品牌
2018/03/21 全球购物
饮料业务员岗位职责
2013/12/15 职场文书
求职简历的自我评价
2014/01/31 职场文书
关于安全的广播稿
2014/10/23 职场文书
统招统分证明
2015/06/23 职场文书
详解盒子端CSS动画性能提升
2021/05/24 HTML / CSS
Linux系统下安装PHP7.3版本
2021/06/26 PHP
Go微服务项目配置文件的定义和读取示例详解
2022/06/21 Golang
win10壁纸在哪个文件夹 win10桌面背景图片文件位置分享
2022/08/05 数码科技