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执行速度全攻略(下)
Oct 09 PHP
PHP4和PHP5共存于一系统
Nov 17 PHP
php session 预定义数组
Mar 16 PHP
php 小乘法表实现代码
Jul 16 PHP
PHP 多维数组排序(usort,uasort)
Jun 30 PHP
PHP中for与foreach的区别分析
Mar 09 PHP
PHP学习散记_编码(json_encode 中文不显示)
Nov 10 PHP
PHP is_subclass_of函数的一个BUG和解决方法
Jun 01 PHP
PHP也能干大事 随机函数
Apr 14 PHP
php实现mysql数据库分表分段备份
Jun 18 PHP
PHP后台备份MySQL数据库的源码实例
Mar 18 PHP
PHP实现带进度条的Ajax文件上传功能示例
Jul 02 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读取目录下所有文件的代码
2008/01/07 PHP
Session服务器配置指南与使用经验的深入解析
2013/06/17 PHP
PHP使用PHPMailer发送邮件的简单使用方法
2013/11/12 PHP
分享一个Laravel好用的Cache宏
2015/03/02 PHP
Yii快速入门经典教程
2015/12/28 PHP
PHP常用函数总结(180多个)
2016/12/25 PHP
php调用云片网接口发送短信的实现方法
2017/10/25 PHP
thinkphp5框架结合mysql实现微信登录和自定义分享链接与图文功能示例
2019/08/13 PHP
关于Laravel参数验证的一些疑与惑
2019/11/19 PHP
jquery 插件实现图片延迟加载效果代码
2010/02/06 Javascript
JavaScrip单线程引擎工作原理分析
2010/09/04 Javascript
javascript如何动态加载表格与动态添加表格行
2013/11/27 Javascript
js判断元素是否隐藏的方法
2014/06/09 Javascript
jQuery浏览器CSS3特写兼容实例
2015/01/19 Javascript
jQuery使用中可能被XSS攻击的一些危险环节提醒
2016/05/24 Javascript
浅谈JS使用[ ]来访问对象属性
2016/09/21 Javascript
AngularJS监听路由变化的方法
2017/03/07 Javascript
Angular @HostBinding()和@HostListener()用法
2018/03/05 Javascript
解决node修改后需频繁手动重启的问题
2018/05/13 Javascript
使用jQuery实现掷骰子游戏
2019/10/24 jQuery
微信小游戏中three.js离屏画布的示例代码
2020/10/12 Javascript
python队列queue模块详解
2018/04/27 Python
python中时间模块的基本使用教程
2019/05/14 Python
Pycharm如何打断点的方法步骤
2019/06/13 Python
python实现俄罗斯方块游戏(改进版)
2020/03/13 Python
基于plt.title无法显示中文的快速解决
2020/05/16 Python
pytorch __init__、forward与__call__的用法小结
2021/02/27 Python
芬兰汽车配件商店:Autonvaraosat24
2017/01/30 全球购物
初中生个人学习的自我评价
2013/12/04 职场文书
应届毕业生求职信范文
2013/12/18 职场文书
银行行长竞聘演讲稿
2014/04/23 职场文书
演讲比赛策划方案
2014/06/11 职场文书
高三毕业评语
2014/12/31 职场文书
教你漂亮打印Pandas DataFrames和Series
2021/05/29 Python
Spring Data JPA框架Repository自定义实现
2022/04/28 Java/Android
python内置模块之上下文管理contextlib
2022/06/14 Python