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 相关文章推荐
在PWS上安装PHP4.0正式版
Oct 09 PHP
PHP采集类snoopy详细介绍(snoopy使用教程)
Jun 19 PHP
php正则匹配html中带class的div并选取其中内容的方法
Jan 13 PHP
php使用数组填充下拉列表框的方法
Mar 31 PHP
php获取系统变量方法小结
May 29 PHP
php二维码生成
Oct 19 PHP
php 猴子摘桃的算法
Jun 20 PHP
php检查函数必传参数是否存在的实例详解
Aug 28 PHP
Laravel下生成验证码的类
Nov 15 PHP
详解laravel passport OAuth2.0的4种模式
Nov 04 PHP
php post换行的方法
Feb 03 PHP
如何用PHP实现多线程编程
May 26 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 调试工具Debug Tools
2011/04/30 PHP
php中通过Ajax如何实现异步文件上传的代码实例
2011/05/07 PHP
简单实用的网站PHP缓存类实例
2014/07/18 PHP
PHP7之Mongodb API使用详解
2015/12/26 PHP
php抽象方法和普通方法的区别点总结
2019/10/13 PHP
Aster vs KG BO3 第三场2.19
2021/03/10 DOTA
JQuery最佳实践之精妙的自定义事件
2010/08/11 Javascript
js动态创建表格,删除行列的小例子
2013/07/20 Javascript
javascript创建createXmlHttpRequest对象示例代码
2014/02/10 Javascript
jQuery操作select下拉框的text值和value值的方法
2014/05/31 Javascript
jquery trigger伪造a标签的click事件取代window.open方法
2014/06/23 Javascript
script标签属性用type还是language
2015/01/21 Javascript
详解js中构造流程图的核心技术JsPlumb
2015/12/08 Javascript
JavaScript原型及原型链终极详解
2016/01/04 Javascript
JavaScript实现大图轮播效果
2017/01/11 Javascript
用JavaScript实现让浏览器停止载入页面的方法
2017/01/19 Javascript
jq checkbox 的全选并ajax传参的实例
2017/04/01 Javascript
微信小程序学习之数据处理详解
2017/07/05 Javascript
jQuery Datatable 多个查询条件自定义提交事件(推荐)
2017/08/24 jQuery
React Native中Navigator的使用方法示例
2017/10/13 Javascript
Vue中使用webpack别名的方法实例详解
2018/06/19 Javascript
javascriptvoid(0)含义以及与&quot;#&quot;的区别讲解
2019/01/19 Javascript
vue 中 命名视图的用法实例详解
2019/08/14 Javascript
JS可断点续传文件上传实现代码解析
2020/07/30 Javascript
Python3基础之基本数据类型概述
2014/08/13 Python
python uuid模块使用实例
2015/04/08 Python
对python tkinter窗口弹出置顶的方法详解
2019/06/14 Python
Django的用户模块与权限系统的示例代码
2019/07/24 Python
Python如何实现小程序 无限求和平均
2020/02/18 Python
如何清空python的变量
2020/07/05 Python
String是最基本的数据类型吗?
2013/06/13 面试题
公共事业管理本科生求职信
2013/10/07 职场文书
工商技校毕业生自荐信
2013/11/15 职场文书
2014年发展党员工作总结
2014/11/12 职场文书
五年级小学生评语
2014/12/26 职场文书
社区宣传标语口号
2015/12/26 职场文书