当前位置:首页 > PHP教程 > php高级应用 > 列表

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

发布:smiling 来源: PHP粉丝网  添加日期:2021-12-10 16:44:26 浏览: 评论:0 

本文实例讲述了PHP swoole和redis异步任务实现方法,分享给大家供大家参考,具体如下:

redis异步任务

interface.php

  1. <?php 
  2. for($i=0;$i<100;$i++){ 
  3.   $msg = "zhezhao[".$i."]"
  4.   $redis = new Redis(); 
  5.   $redis->connect("127.0.0.1"); 
  6.   $redis->publish("test",$msg); 
  7.   $redis->close(); 

handler.php

  1. <?php 
  2. $redis = new Redis(); 
  3. $redis->connect("127.0.0.1"); 
  4. $redis->subscribe(array("test"), 'handleFun'); 
  5. function handleFun($redis$chan$data) { 
  6.   write($data); 
  7. function write($data){ 
  8.   $path = "/tmp/mailList-redis.log"
  9.   $str = "[".date("Y-m-d H:i:s")."]".$data
  10.   $str .= PHP_EOL; 
  11.   file_put_contents($path,$str,FILE_APPEND); 

swoole异步任务

interface.php

  1. <?php 
  2. for($i=0;$i<100;$i++){ 
  3.   $msg = "zhezhao[".$i."]"
  4.   $client = new swoole_client(SWOOLE_SOCK_TCP); 
  5.   $client->connect('127.0.0.1', 9501, 0.5); 
  6.   $client->send($msg); 
  7.   $client->close(); 

handler.php

  1. <?php 
  2. $serv = new swoole_server("127.0.0.1", 9501); 
  3. $serv->set(array('task_worker_num' => 4)); 
  4. $serv->on('receive'function($serv$fd$from_id$data) { 
  5.   $task_id = $serv->task($data); 
  6. }); 
  7. $serv->on('task'function ($serv$task_id$from_id$data) { 
  8.   handle($data); 
  9.   $serv->finish($data); 
  10. }); 
  11. $serv->start(); 
  12. function handle($data){ 
  13.   sleep(2); 
  14.   mailLog("Send Mail successfully to $data"); 
  15. function mailLog($str){ 
  16.   $path = "/tmp/mailList.log"
  17.   $str = "[".date("Y-m-d H:i:s")."]".$str
  18.   $str .= PHP_EOL; 
  19.   file_put_contents($path,$str,FILE_APPEND); 

比较

redis异步任务日志

swoole redis php异步任务

swoole异步任务日志

swoole redis php异步任务

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

Tags: swoole redis php异步任务

分享到: