Swoole 异步Task,主要实现调用异步任务的执行。

常用的场景:异步支付处理、异步订单处理、异步日志处理、异步发送邮件/短信等。

Swoole 的实现方式是 worker 进程处理数据请求,分配给 task 进程执行。

官方介绍:

task 底层使用Unix Socket管道通信,是全内存的,没有IO消耗。单进程读写性能可达100万/s,不同的进程使用不同的管道通信,可以最大化利用多核。

本地版本:PHP 7.2.6、Swoole 4.3.1。

不多说,先看效果图:

代码

server.php

class Server{private $serv;public function __construct() {$this->serv = new swoole_server('0.0.0.0', 9501);$this->serv->set(['worker_num'      => 2, //开启2个worker进程'max_request'     => 4, //每个worker进程 max_request设置为4次'task_worker_num' => 4, //开启4个task进程'dispatch_mode'   => 2, //数据包分发策略 - 固定模式]);$this->serv->on('Start', [$this, 'onStart']);$this->serv->on('Connect', [$this, 'onConnect']);$this->serv->on("Receive", [$this, 'onReceive']);$this->serv->on("Close", [$this, 'onClose']);$this->serv->on("Task", [$this, 'onTask']);$this->serv->on("Finish", [$this, 'onFinish']);$this->serv->start();}public function onStart($serv) {echo "#### onStart ####".PHP_EOL;echo "SWOOLE ".SWOOLE_VERSION . " 服务已启动".PHP_EOL;echo "master_pid: {$serv->master_pid}".PHP_EOL;echo "manager_pid: {$serv->manager_pid}".PHP_EOL;echo "########".PHP_EOL.PHP_EOL;}public function onConnect($serv, $fd) {echo "#### onConnect ####".PHP_EOL;echo "客户端:".$fd." 已连接".PHP_EOL;echo "########".PHP_EOL.PHP_EOL;}public function onReceive($serv, $fd, $from_id, $data) {echo "#### onReceive ####".PHP_EOL;echo "worker_pid: {$serv->worker_pid}".PHP_EOL;echo "客户端:{$fd} 发来的Email:{$data}".PHP_EOL;$param = ['fd'    => $fd,'email' => $data];$rs = $serv->task(json_encode($param));if ($rs === false) {echo "任务分配失败 Task ".$rs.PHP_EOL;} else {echo "任务分配成功 Task ".$rs.PHP_EOL;}echo "########".PHP_EOL.PHP_EOL;}public function onTask($serv, $task_id, $from_id, $data) {echo "#### onTask ####".PHP_EOL;echo "#{$serv->worker_id} onTask: [PID={$serv->worker_pid}]: task_id={$task_id}".PHP_EOL;//业务代码for($i = 1 ; $i <= 5 ; $i ++ ) {sleep(2);echo "Task {$task_id} 已完成了 {$i}/5 的任务".PHP_EOL;}$data_arr = json_decode($data, true);$serv->send($data_arr['fd'] , 'Email:'.$data_arr['email'].',发送成功');$serv->finish($data);echo "########".PHP_EOL.PHP_EOL;}public function onFinish($serv,$task_id, $data) {echo "#### onFinish ####".PHP_EOL;echo "Task {$task_id} 已完成".PHP_EOL;echo "########".PHP_EOL.PHP_EOL;}public function onClose($serv, $fd) {echo "Client Close.".PHP_EOL;}}$server = new Server();

client.php

<?phpclass Client{private $client;public function __construct() {$this->client = new swoole_client(SWOOLE_SOCK_TCP, SWOOLE_SOCK_ASYNC);$this->client->on('Connect', [$this, 'onConnect']);$this->client->on('Receive', [$this, 'onReceive']);$this->client->on('Close', [$this, 'onClose']);$this->client->on('Error', [$this, 'onError']);}public function connect() {if(!$fp = $this->client->connect("127.0.0.1", 9501 , 1)) {echo "Error: {$fp->errMsg}[{$fp->errCode}]".PHP_EOL;return;}}public function onConnect($cli) {fwrite(STDOUT, "输入Email:");swoole_event_add(STDIN, function() {fwrite(STDOUT, "输入Email:");$msg = trim(fgets(STDIN));$this->send($msg);});}public function onReceive($cli, $data) {echo PHP_EOL."Received: ".$data.PHP_EOL;}public function send($data) {$this->client->send($data);}public function onClose($cli) {echo "Client close connection".PHP_EOL;}public function onError() {}}$client = new Client();$client->connect();

Swoole Task任务使用相关推荐

  1. swoole task MySQL连接池

    参考 https://blog.csdn.net/ldy3243942/article/details/40596547 上一章中我简单讲解了如何开启和使用Task功能.这一节,我将提供一个Task的 ...

  2. swoole task 异步任务 注释请忽略 自己加的不一定对 别误导大家。。。。。。

    注释可以忽略不计 个人加的 可能会有错误 别误导大家... server端 <?php class Server {private $serv;public function __constru ...

  3. php定时任务sw,[原创]Swoole和Swoft的那些事(Task投递/定时任务篇)

    Swoft的任务功能基于Swoole的Task机制,或者说Swoft的Task机制本质就是对SwooleTask机制的封装和加强. 任务投递 //Swoft\Task\Task.php class T ...

  4. php 游戏开发swoole,《基于 Swoole 的对战游戏实践》开课啦

    项目由来 在三月份的时候就开始编写这个项目,原本只是觉得自己对 Swoole 不太熟练,当作练手来写着玩的.写着写着发现还挺好玩的,代码量也不多,捉迷藏游戏的趣味性不错. 如果只写完代码就扔在 Git ...

  5. Swoole基础知识,安装,websocket应用及各种问题详解

    1. swoole基础-概述 Swoole基础课程正式推出!零基础开始,让你循环渐进的掌握swoole. 传统的phper们大部分都是用于开发web应用程序,并且大部分都是在用类似yii\larave ...

  6. swoft php怎么样,Swoft源码之Swoole和Swoft的分析

    这篇文章给大家分享的内容是关于Swoft 源码剖析之Swoole和Swoft的一些介绍(Task投递/定时任务篇),有一定的参考价值,有需要的朋友可以参考一下. 前言 Swoft的任务功能基于Swoo ...

  7. mysql异步task_EasySwoole高性能task异步任务

    EasySwoole高性能task异步任务 羡仙. • 2019 年 06 月 20 日 和上一篇一样也是遗漏的重要文章,我太聪明了,这都能发现...他们都有共同的特征:笔记里的开头在上一篇...不管 ...

  8. Swoole结合Thinkphp发送10万+微信模板消息

    使用Thinkphp5.0框架 服务端: <?php namespace app\Console;use think\console\Command; use think\console\Inp ...

  9. thinkphp使用 think-swoole task

    是参考这位大佬的,大家可以去看看https://www.kancloud.cn/book_xwy/think-swoole3/1720752 安装thinkphp6 composer create-p ...

最新文章

  1. 使用logrotate管理nginx日志文件
  2. codeforce 154C - Double Profiles(hash)
  3. socket使用多进程实现并发的服务器
  4. QQProtect.exe(Q盾)
  5. java 多态实现的jvm调用过程_多态:JVM是如何进行方法调用的
  6. java的min函数_Java语言实现包含min函数的栈
  7. linux建立ftp suse_suse开通ftp的实例
  8. linux anaconda搜索路径,Anaconda安装及虚拟环境搭建教程(linux)
  9. Pannellum:实例之通过全景图游览
  10. 数值分析(7)-正交多项式
  11. Python语言的技术领域
  12. Java程序员如何写好一份个人求职简历
  13. msvcr71.dll文件丢失——解决办法
  14. 【安装Oracle 12.2.0.1补丁】Oracle Database SAP Bundle Patch 12.2.0.1.220118 - 202202
  15. 读书笔记:《人类简史:从动物到上帝》
  16. 关于华为应用市场审核App无法启动的问题
  17. 手把手教你在好友不知道的情况下,检查哪个微信好友删了你。
  18. 如果自己的微信被对方删除,微信会有哪些提示?
  19. STC89C52RC - 2 - 开发环境搭建
  20. 数据挖掘—逻辑回归分类—信用卡欺诈分析

热门文章

  1. C语言(24)蛇形填数
  2. VR点亮元宇宙丨酷雷曼与你相约2022世界VR产业大会
  3. 前端还能这么玩?(女朋友生日,用前端写了一个好玩的送给了她,高兴坏了)
  4. tf.transpose用法
  5. [更新]基于MFC对话框并使用MCI接口的音乐播放器
  6. 工具篇:分区扩展工具 resize2fs
  7. NPDP 和PMP 产品经理应该考哪个?
  8. 可能是最详细的海明校验码(汉明码)解法
  9. CentOS7 单节点和多节点 HPL测试
  10. 图删边游戏(强连通分量)