PHP swoole和redis异步任务实现方法分析

 更新时间:2019年08月12日 09:29:47   作者:koastal  
这篇文章主要介绍了PHP swoole和redis异步任务实现方法,结合具体实例形式对比分析了swoole和redis异步任务具体实现方法及区别,需要的朋友可以参考下

本文实例讲述了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异步任务日志

这里写图片描述

swoole异步任务日志

这里写图片描述

通过对比任务日志我们可以看到,由于swoole开了4个进程执行异步任务,所以处理异步任务的效率大概是redis的四倍,如果swoole只开一个进程的话,效率和redis几乎没有什么差别。

更多关于PHP相关内容感兴趣的读者可查看本站专题:《PHP进程与线程操作技巧总结》、《PHP网络编程技巧总结》、《PHP基本语法入门教程》、《PHP数组(Array)操作技巧大全》、《php字符串(string)用法总结》、《php+mysql数据库操作入门教程》及《php常见数据库操作技巧汇总

希望本文所述对大家PHP程序设计有所帮助。

相关文章

  • PHP浮点数精度问题汇总

    PHP浮点数精度问题汇总

    这篇文章主要介绍了PHP浮点数精度问题汇总,本文着重探讨PHP浮点数精度损失问题,用三个段落不同的方式讲解了这个问题的形成原因以及解决方法,需要的朋友可以参考下
    2015-05-05
  • PHP中preg_match函数正则匹配的字符串长度问题

    PHP中preg_match函数正则匹配的字符串长度问题

    这篇文章主要介绍了PHP中preg_match函数正则匹配的字符串长度问题,如果你也遇到了preg_match正则提取内容时总是空白或提取不到的话,那就可能是遇到了这个问题啦,需要的朋友可以参考下
    2015-05-05
  • PHP取余函数介绍MOD(x,y)与x%y

    PHP取余函数介绍MOD(x,y)与x%y

    php取余数用%符号,即为模运算,取余数的意思,这玩意使用起来可要注意啦
    2014-05-05
  • PHP中通过ADODB库实现调用Access数据库之修正版本

    PHP中通过ADODB库实现调用Access数据库之修正版本

    PHP中通过ADODB库实现调用Access数据库之修正版本...
    2006-12-12
  • PHP转Go之数组的正确使用详解

    PHP转Go之数组的正确使用详解

    这篇文章主要为大家对比一下PHP中的Array和Golang中的 Array&Slice&Map,文中的示例代码讲解详细,感兴趣的小伙伴可以跟随小编一起学习一下
    2023-09-09
  • PHP安全配置优化详解

    PHP安全配置优化详解

    这篇文章主要介绍了PHP安全配置优化详解,优化的几个重要的知识点都列举出了,有需要的同学可以学习下
    2021-03-03
  • C# WinForm中实现快捷键自定义设置实例

    C# WinForm中实现快捷键自定义设置实例

    这篇文章主要介绍了对C# WinForm中实现快捷键自定义设置实例,本文实现了大多数软件如QQ、有道词典中的快捷键设置功能,即按下相应按键后显示在文本框中,需要的朋友可以参考下
    2015-01-01
  • PHP无敌近乎加密方式!

    PHP无敌近乎加密方式!

    最近要用到PHP,所以去网上找了些资料!无意中看到这篇文章,推荐给大家.
    2010-07-07
  • php中\r \r\n \t的区别示例介绍

    php中\r \r\n \t的区别示例介绍

    这篇文章主要介绍了php中\r \r\n \t的区别,需要的朋友可以参考下
    2014-02-02
  • PHP 获取文件路径(灵活应用__FILE__)

    PHP 获取文件路径(灵活应用__FILE__)

    __FILE__ ,是返回文件的完整路径和文件名。如果用在包含文件中,则返回包含文件名。自 PHP 4.0.2 起,__FILE__ 总是包含一个绝对路径,而在此之前的版本有时会包含一个相对路径
    2013-02-02

最新评论