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 相关文章推荐
如何开发一个虚拟域名系统
Oct 09 PHP
PHP strtok()函数的优点分析
Mar 02 PHP
PHP中开发XML应用程序之基础篇 添加节点 删除节点 查询节点 查询节
Jul 09 PHP
匹配csdn用户数据库与官方用户的重合度并将重叠部分的用户筛选出来
Dec 25 PHP
php中调用其他系统http接口的方法说明
Feb 28 PHP
php创建多级目录的方法
Mar 24 PHP
PHP+ajax分页实例简析
Dec 07 PHP
CI框架AR操作(数组形式)实现插入多条sql数据的方法
May 18 PHP
PHP标准类(stdclass)用法示例
Sep 28 PHP
PHP多进程通信-消息队列使用
Mar 08 PHP
关于Curl在Swoole协程中的解决方案详析
Sep 12 PHP
TP5框架model常见操作示例小结【增删改查、聚合、时间戳、软删除等】
Apr 05 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
给多个地址发邮件的类
2006/10/09 PHP
php 读取文件乱码问题
2010/02/20 PHP
CodeIgniter使用smtp服务发送html邮件的方法
2015/06/10 PHP
PHP的关于变量和日期处理的一些面试题目整理
2015/08/10 PHP
PHP多维数组遍历方法(2种实现方法)
2015/12/10 PHP
Zend Framework教程之资源(Resources)用法实例详解
2016/03/14 PHP
TNC vs IO BO3 第一场2.13
2021/03/10 DOTA
javascript String 的扩展方法集合
2008/06/01 Javascript
uploadify 3.0 详细使用说明
2012/06/18 Javascript
js 在定义的时候立即执行的函数表达式(function)写法
2013/01/16 Javascript
深入探讨JavaScript、JQuery屏蔽网页鼠标右键菜单及禁止选择复制
2014/06/10 Javascript
使用JS获取当前地理位置方法汇总
2014/12/18 Javascript
jquery实现在光标位置插入内容的方法
2015/02/05 Javascript
js实现精美的银灰色竖排折叠菜单
2015/05/16 Javascript
解析浏览器端的AJAX缓存机制
2016/06/21 Javascript
jQuery mobile的header和footer在点击屏幕的时候消失的解决办法
2016/07/01 Javascript
Vue实现PopupWindow组件详解
2018/04/28 Javascript
详解angular脏检查原理及伪代码实现
2018/06/08 Javascript
JavaScript实现图片懒加载的方法分析
2018/07/05 Javascript
用node.js写一个jenkins发版脚本
2019/05/21 Javascript
使用webpack搭建vue项目及注意事项
2019/06/10 Javascript
Vue实现开心消消乐游戏算法
2019/10/22 Javascript
jQuery实现简单日历效果
2020/07/05 jQuery
[01:03:41]DOTA2-DPC中国联赛 正赛 Dynasty vs XG BO3 第三场 2月2日
2021/03/11 DOTA
python使用xauth方式登录饭否网然后发消息
2014/04/11 Python
利用Python演示数型数据结构的教程
2015/04/03 Python
python加载自定义词典实例
2019/12/06 Python
Python对称的二叉树多种思路实现方法
2020/02/28 Python
python接口自动化框架实战
2020/12/23 Python
HTML5使用DOM进行自定义控制示例代码
2013/06/08 HTML / CSS
Footshop乌克兰:运动鞋的最大选择
2019/12/01 全球购物
加拿大著名的奢侈品购物网站:SSENSE(支持中文)
2020/06/25 全球购物
团拜会主持词
2015/07/04 职场文书
导游词之西安大清真寺
2019/12/17 职场文书
解析laravel使用workerman用户交互、服务器交互
2021/04/28 PHP
在redisCluster中模糊获取key方式
2021/07/09 Redis