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 相关文章推荐
PHP4与PHP5的时间格式问题
Feb 17 PHP
php防注入,表单提交值转义的实现详解
Jun 10 PHP
php启用zlib压缩文件的配置方法
Jun 12 PHP
zend optimizer在wamp的基础上安装图文教程
Oct 26 PHP
PHP获取本周第一天和最后一天示例代码
Feb 24 PHP
php实例分享之二维数组排序
May 15 PHP
PHP实现获取图片颜色值的方法
Jul 11 PHP
朋友网关于QQ相关的PHP代码(研究QQ的绝佳资料)
Jan 26 PHP
php字符串分割函数用法实例
Mar 17 PHP
ThinkPHP中数据操作案例分析
Sep 27 PHP
thinkphp项目部署到Linux服务器上报错“模板不存在”如何解决
Apr 27 PHP
PHP实现的登录,注册及密码修改功能分析
Nov 25 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无限分类源码分享(思路不错)
2011/10/13 PHP
php 字符串替换的方法
2012/01/10 PHP
如何利用http协议发布博客园博文评论
2015/08/03 PHP
php使用get_class_methods()函数获取分类的方法
2016/07/20 PHP
详解PHP的抽象类和抽象方法以及接口总结
2019/03/15 PHP
php设计模式之备忘模式分析【星际争霸游戏案例】
2020/03/24 PHP
为Yahoo! UI Extensions Grid增加内置的可编辑器
2007/03/10 Javascript
JavaScript 检测浏览器和操作系统的脚本
2008/12/26 Javascript
基于jQuery制作迷你背词汇工具
2010/07/27 Javascript
用nodejs写的一个简单项目打包工具
2013/05/11 NodeJs
JQuery中$.ajax()方法参数详解及应用
2013/12/12 Javascript
基于jQuery的判断iPad、iPhone、Android是横屏还是竖屏的代码
2014/05/11 Javascript
javascript实现简单查找与替换的方法
2015/07/22 Javascript
基于JS代码实现图片在页面中旋转效果
2016/06/16 Javascript
AngularJS基础 ng-init 指令简单示例
2016/08/02 Javascript
js中小数向上取整数,向下取整数,四舍五入取整数的实现(必看篇)
2017/02/13 Javascript
JS仿QQ好友列表展开、收缩功能(第二篇)
2017/07/07 Javascript
浅谈Emergence.js 检测元素可见性的 js 插件
2017/11/18 Javascript
vue按需加载组件webpack require.ensure的方法
2017/12/13 Javascript
vue+webpack中配置ESLint
2018/11/07 Javascript
vue-cli随机生成port源码的方法
2019/09/02 Javascript
python+Django+apache的配置方法详解
2016/06/01 Python
Python编程实现删除VC临时文件及Debug目录的方法
2017/03/22 Python
Python获取当前函数名称方法实例分享
2018/01/18 Python
python调用c++ ctype list传数组或者返回数组的方法
2019/02/13 Python
Django shell调试models输出的SQL语句方法
2019/08/29 Python
scrapy爬虫:scrapy.FormRequest中formdata参数详解
2020/04/30 Python
浅谈HTML5新增和废弃的标签
2019/04/28 HTML / CSS
Kathmandu美国网站:新西兰户外运动品牌
2019/03/23 全球购物
大学生家政服务项目创业计划书
2014/01/30 职场文书
高中英语演讲稿范文
2014/04/24 职场文书
公司踏青活动方案
2014/08/16 职场文书
民主评议政风行风整改方案
2014/09/17 职场文书
幼儿园六一儿童节演讲稿
2015/03/19 职场文书
新课程改革心得体会
2016/01/22 职场文书
Python经常使用的一些内置函数
2022/04/11 Python