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读取MySQL数据代码
Jun 05 PHP
简单示例AJAX结合PHP代码实现登录效果代码
Jul 25 PHP
PHP代码网站如何防范SQL注入漏洞攻击建议分享
Mar 01 PHP
PHP中ini_set和ini_get函数的用法小结
Feb 18 PHP
PHP函数实现分页含文本分页和数字分页
Oct 23 PHP
php实现使用正则将文本中的网址转换成链接标签
Dec 03 PHP
php计算两个日期相差天数的方法
Mar 14 PHP
Windows下编译PHP5.4和xdebug全记录
Apr 03 PHP
PHP中常见的缓存技术实例分析
Sep 23 PHP
PHP基于phpqrcode类生成二维码的方法示例详解
Aug 07 PHP
TP5多入口设置实例讲解
Dec 15 PHP
laravel与thinkphp之间的区别与优缺点
Mar 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
完美解决dedecms中的[html][/html]和[code][/code]问题
2007/03/20 PHP
PHP优于Node.js的五大理由分享
2012/09/15 PHP
PHP cdata 处理(详细介绍)
2013/07/05 PHP
thinkPHP批量删除的实现方法分析
2016/11/09 PHP
php封装单文件上传到数据库(路径)
2017/10/15 PHP
PHP中str_split()函数的用法讲解
2019/04/11 PHP
Prototype使用指南之string.js
2007/01/10 Javascript
JScript 脚本实现文件下载 一般用于下载木马
2009/10/29 Javascript
ExtJS 工具栏 分页事件参数
2010/03/05 Javascript
NodeJs中的非阻塞方法介绍
2012/06/05 NodeJs
使用jQuery validate 验证注册表单实例演示
2013/03/25 Javascript
使用vue实现点击按钮滑出面板的实现代码
2017/01/10 Javascript
bootstrap栅格系统示例代码分享
2017/05/22 Javascript
最常用的jQuery表单验证(简单)
2017/05/23 jQuery
node.js 核心http模块,起一个服务器,返回一个页面的实例
2017/09/11 Javascript
基于JSONP原理解析(推荐)
2017/12/04 Javascript
IE9 elementUI文件上传的问题解决
2018/10/17 Javascript
VUE2.0+ElementUI2.0表格el-table循环动态列渲染的写法详解
2018/11/30 Javascript
vue cli3.0结合echarts3.0与地图的使用方法示例
2019/03/26 Javascript
利用vue3+ts实现管理后台(增删改查)
2020/10/30 Javascript
解决vue打包 npm run build-test突然不动了的问题
2020/11/13 Javascript
原生JavaScript实现轮播图
2021/01/10 Javascript
Python抓取百度查询结果的方法
2015/07/08 Python
pandas.cut具体使用总结
2019/06/24 Python
Python3如何对urllib和urllib2进行重构
2019/11/25 Python
python入门教程之基本算术运算符
2020/11/13 Python
Spartoo英国:欧洲最大的网上鞋店
2016/09/13 全球购物
英国排名第一的冲浪店:Ann’s Cottage
2020/06/21 全球购物
毕业实习评语
2014/02/10 职场文书
出国英文推荐信
2014/05/10 职场文书
学生抄袭作业的检讨书
2014/10/02 职场文书
赵氏孤儿观后感
2015/06/09 职场文书
小学记事作文之200字
2019/08/06 职场文书
Nginx+Tomcat负载均衡集群的实现示例
2021/10/24 Servers
深入浅出的讲解:信号调制到底是如何实现的
2022/02/18 无线电
MySQL 语句执行顺序举例解析
2022/06/05 MySQL