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 相关文章推荐
一个可以删除字符串中HTML标记的PHP函数
Oct 09 PHP
PHP 简单日历实现代码
Oct 28 PHP
PHP Memcached + APC + 文件缓存封装实现代码
Mar 11 PHP
用PHP实现小写金额转换大写金额的代码(精确到分)
Jan 10 PHP
用PHP实现 上一篇、下一篇的代码
Sep 29 PHP
PHP使用CURL获取302跳转后的地址实例
May 04 PHP
php编写的抽奖程序中奖概率算法
May 14 PHP
Yii快速入门经典教程
Dec 28 PHP
PHP载入图像imagecreatefrom_gif_jpeg_png系列函数用法分析
Nov 14 PHP
详解PHP swoole process的使用方法
Aug 26 PHP
php常用经典函数集锦【数组、字符串、栈、队列、排序等】
Aug 23 PHP
PHP的imageTtfText()函数深入详解
Mar 03 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 mysql Errcode: 28 终极解决方法
2009/07/01 PHP
php遍历所有文件及文件夹的方法深入解析
2013/06/08 PHP
ThinkPHP独立分组使用的注意事项
2014/11/25 PHP
php抓取网站图片并保存的实现方法
2015/10/29 PHP
PHP实现的简单操作SQLite数据库类与用法示例
2017/06/19 PHP
php实现的二分查找算法示例
2017/06/20 PHP
PHP排序算法之希尔排序(Shell Sort)实例分析
2018/04/20 PHP
Javascript 判断 object 的特定类转载
2007/02/01 Javascript
jQuery1.6 正式版发布并提供下载
2011/05/05 Javascript
使用原生javascript创建通用表单验证——更锋利的使用dom对象
2011/09/13 Javascript
利用js动态添加删除table行的示例代码
2013/12/16 Javascript
Js+php实现异步拖拽上传文件
2015/06/23 Javascript
javascript 判断两个日期之差的示例代码
2015/09/05 Javascript
javascript实现右侧弹出“分享到”窗口效果
2016/02/01 Javascript
使用Object.defineProperty实现简单的js双向绑定
2016/04/15 Javascript
基于Bootstrap实现Material Design风格表单插件 附源码下载
2016/04/18 Javascript
非常酷炫的Bootstrap图片轮播动画
2016/05/27 Javascript
Es6 写的文件import 起来解决方案详解
2016/12/13 Javascript
浅谈javascript alert和confirm的美化
2016/12/15 Javascript
JSON字符串和JSON对象相互转化实例详解
2017/01/05 Javascript
老生常谈JavaScript面向对象基础与this指向问题
2017/10/16 Javascript
react 实现页面代码分割、按需加载的方法
2018/04/03 Javascript
vue iview实现动态路由和权限验证功能
2018/04/17 Javascript
[01:04:20]完美世界DOTA2联赛PWL S2 LBZS vs Forest 第一场 11.29
2020/12/02 DOTA
Python基于多线程实现ping扫描功能示例
2018/07/23 Python
对python打乱数据集中X,y标签对的方法详解
2018/12/14 Python
python 并发编程 阻塞IO模型原理解析
2019/08/20 Python
CSS3实现网站商品展示效果图
2020/01/18 HTML / CSS
集世界奢侈品和设计师品牌的意大利精品买手店:Tessabit
2019/08/17 全球购物
研发工程师岗位职责
2014/04/28 职场文书
节电标语大全
2014/06/23 职场文书
幼儿园教师节感谢信
2015/01/23 职场文书
单位介绍信格式范文
2015/05/04 职场文书
工作态度恶劣检讨书
2015/05/06 职场文书
人口与计划生育责任书
2015/05/09 职场文书
MySQL新手入门进阶语句汇总
2022/09/23 MySQL