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正则表达式使用的详细介绍
Apr 27 PHP
浅析PHP 按位与或 (^ 、&amp;)
Jun 21 PHP
php 读取文件头判断文件类型的实现代码
Aug 05 PHP
php中require和require_once的区别说明
Feb 27 PHP
PHP实现抓取HTTPS内容
Dec 01 PHP
如何解决PHP无法实现多线程的问题
Sep 25 PHP
php处理带有中文URL的方法
Jul 11 PHP
PHP多进程编程总结(推荐)
Jul 18 PHP
php技巧小结【推荐】
Jan 19 PHP
PHP用户注册邮件激活账户的实现代码
May 31 PHP
PHP中危险的file_put_contents函数详解
Nov 04 PHP
Ajax中的JSON格式与php传输过程全面解析
Nov 14 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简单命令代码集锦
2007/09/24 PHP
探讨PHP删除文件夹的三种方法
2013/06/09 PHP
php中实现xml与mysql数据相互转换的方法
2014/12/25 PHP
Yii2 ActiveRecord多表关联及多表关联搜索的实现
2016/06/30 PHP
PHP实现权限管理功能示例
2017/09/22 PHP
不要小看注释掉的JS 引起的安全问题
2008/12/27 Javascript
toString()一个会自动调用的方法
2010/02/08 Javascript
jquery 注意事项与常用语法小结
2010/06/07 Javascript
解决jquery1.9不支持browser对象的问题
2013/11/13 Javascript
jquery实现点击弹出层效果的简单实例
2014/03/03 Javascript
JavaScript中setUTCFullYear()方法的使用简介
2015/06/12 Javascript
JS实现滑动菜单效果代码(包括Tab,选项卡,横向等效果)
2015/09/24 Javascript
特殊日期提示功能的实现方法
2016/06/16 Javascript
分享JS数组求和与求最大值的方法
2016/08/11 Javascript
easyui-edatagrid.js实现回车键结束编辑功能的实例
2017/04/12 Javascript
Express之get,pos请求参数的获取
2017/05/02 Javascript
Nodejs调用WebService的示例代码
2017/09/29 NodeJs
jquery 获取索引值在一定范围的列表方法
2018/01/25 jQuery
一种angular的方法级的缓存注解(装饰器)
2018/03/13 Javascript
mpvue中配置vuex并持久化到本地Storage图文教程解析
2018/03/15 Javascript
vue动态绑定class的几种常用方式小结
2019/05/21 Javascript
Nodejs libuv运行原理详解
2019/08/21 NodeJs
Python 使用SMTP发送邮件的代码小结
2016/09/21 Python
浅谈python内置变量-reversed(seq)
2017/06/21 Python
打包python 加icon 去掉cmd黑窗口方法
2019/06/24 Python
python障碍式期权定价公式
2019/07/19 Python
Python reques接口测试框架实现代码
2020/07/28 Python
CSS3近阶段篇之酷炫的3D旋转透视
2016/04/28 HTML / CSS
CSS3实现网站商品展示效果图
2020/01/18 HTML / CSS
美国现代家具购物网站:LexMod
2019/01/09 全球购物
汉语言文学毕业生自荐信范文
2014/03/24 职场文书
个人作风建设总结
2014/10/23 职场文书
中考学习决心书
2015/02/04 职场文书
让生命充满爱观后感
2015/06/08 职场文书
浅谈Python数学建模之数据导入
2021/06/23 Python
SqlServer常用函数及时间处理小结
2023/05/08 SQL Server