博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
在php-fpm或apache中使用swoole提供的task功能
阅读量:7251 次
发布时间:2019-06-29

本文共 1011 字,大约阅读时间需要 3 分钟。

AsyncTask是swoole提供一套生产者消费者模型,可以方便地将一个慢速任务投递到队列,由进程池异步地执行。task功能目前只能在swoole_server中使用。1.9.0版本提供了RedisServer框架,可以基于RedisServer和Task实现一个Server程序,在php-fpm或apache中直接调用Redis扩展就可以使用swoole的task功能了。

创建RedisServer

set(array( 'task_worker_num' => 32, 'worker_num' => 1,));$server->setHandler('LPUSH', function ($fd, $data) use ($server) { $taskId = $server->task($data); if ($taskId === false) { return Server::format(Server::ERROR); } else { return Server::format(Server::INT, $taskId); }});$server->on('Finish', function() {});$server->on('Task', function ($serv, $taskId, $workerId, $data) { //处理任务});$server->start();
  • 如果是本机调用可以监听UnixSocket,局域网内调用需要使用IP:PORT

  • Task中$data就是客户端投递的数据

  • 其他语言也可以使用Redis客户端投递任务

  • 可以根据Task任务执行的速度调节task_worker_num控制启动的进程数量,这些进程是由swoole底层负责管理的,在发生致命错误或进程退出后底层会重新创建新的任务进程

投递任务

$redis = new Redis;$redis->connect('127.0.0.1', 9501);$taskId = $redis->lpush("myqueue", json_encode(array("hello", "swoole")));

注意这个RedisServer并不是一台真正的Redis服务器,它只支持LPUSH一个指令。

转载地址:http://zehbm.baihongyu.com/

你可能感兴趣的文章
Python学习笔记【第二篇】:运算符、比较、关系运算符
查看>>
golang 资源
查看>>
关于FileFOutputStream应用中的FileNotFoundException问题
查看>>
[产品设计] - 设计理念
查看>>
关于gitblit成功启动,但在阿里云外网地址无法访问的问题
查看>>
C++访问MySql
查看>>
1056. 组合数的和(15)
查看>>
Git基础教程(一)
查看>>
10.9原版安装盘制作方法
查看>>
css解决select下拉表单option高度的办法
查看>>
「洛谷P1198」 [JSOI2008]最大数 解题报告
查看>>
C# 里EF 对Mysql DB更新,乱码
查看>>
linux权限相关
查看>>
iOS - IM 即时通讯
查看>>
function的name属性
查看>>
【转载】Deep Belief Networks资料汇总
查看>>
三角螺旋阵 (代码)
查看>>
正则表达式匹配规则
查看>>
词语过滤
查看>>
10.包和访问权限
查看>>