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与SQL注入攻击[三]
Apr 17 PHP
PHP 开发环境配置(Zend Server安装)
Apr 28 PHP
PHP如何解决网站大流量与高并发的问题
Jun 25 PHP
yii框架源码分析之创建controller代码
Jun 28 PHP
php读取EXCEL文件 php excelreader读取excel文件
Dec 06 PHP
PHP笔记之:日期函数的使用介绍
Apr 24 PHP
php防止sql注入之过滤分页参数实例
Nov 03 PHP
PHP操作文件的一些基本函数使用示例
Nov 18 PHP
php使用cookie实现记住用户名和密码实现代码
Apr 27 PHP
php打造智能化的柱状图程序,用于报表等
Jun 19 PHP
php微信公众号开发(3)php实现简单微信文本通讯
Dec 15 PHP
浅谈Laravel中的三种中间件的作用
Oct 13 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
ajax缓存问题解决途径
2006/12/06 PHP
jQuery中创建实例与原型继承揭秘
2011/12/21 Javascript
40个有创意的jQuery图片和内容滑动及弹出插件收藏集之二
2011/12/31 Javascript
javascript截取字符串(通过substring实现并支持中英文混合)
2013/06/24 Javascript
jquery+CSS3实现3D拖拽相册效果
2016/07/18 Javascript
详解网站中图片日常使用以及优化手法
2017/01/09 Javascript
移动端手指放大缩小插件与js源码
2017/05/22 Javascript
JavaScript基于面向对象实现的猜拳游戏
2018/01/03 Javascript
如何以Angular的姿势打开Font-Awesome详解
2018/04/22 Javascript
Webpack中雪碧图插件使用详解
2018/05/25 Javascript
微信小程序实现订单倒计时
2020/11/01 Javascript
layui实现form表单同时提交数据和文件的代码
2019/10/25 Javascript
Javascript 关于基本类型和引用类型的个人理解
2019/11/01 Javascript
Python生成器(Generator)详解
2015/04/13 Python
Python的time模块中的常用方法整理
2015/06/18 Python
Python只用40行代码编写的计算器实例
2017/05/10 Python
python中文分词,使用结巴分词对python进行分词(实例讲解)
2017/11/14 Python
Python的numpy库中将矩阵转换为列表等函数的方法
2018/04/04 Python
python监测当前联网状态并连接的实例
2018/12/18 Python
详解Python数据可视化编程 - 词云生成并保存(jieba+WordCloud)
2019/03/26 Python
django 实现将本地图片存入数据库,并能显示在web上的示例
2019/08/07 Python
python第三方库学习笔记
2020/02/07 Python
keras读取训练好的模型参数并把参数赋值给其它模型详解
2020/06/15 Python
基于Python的接口自动化unittest测试框架和ddt数据驱动详解
2021/01/27 Python
HTML5之SVG 2D入门5—颜色的表示及定义方式
2013/01/30 HTML / CSS
为你的html5网页添加音效示例
2014/04/03 HTML / CSS
英国儿童图书网站:Scholastic
2017/03/26 全球购物
学院领导推荐信
2013/10/30 职场文书
初一家长会邀请函
2014/01/31 职场文书
《忆江南》教学反思
2014/04/07 职场文书
宣传工作经验材料
2014/06/02 职场文书
2016年“5.12”护士节致辞
2015/07/31 职场文书
html+css实现文字折叠特效实例
2021/06/02 HTML / CSS
html form表单基础入门案例讲解
2021/07/21 HTML / CSS
Java 获取Word中所有的插入和删除修订的方法
2022/04/06 Java/Android
win sever 2022如何占用操作主机角色
2022/06/25 Servers