请选择 进入手机版 | 继续访问电脑版
绿茶科技社区
● 新建 RedisServer.php
● 代码如下
  1. <?php

  2. use Swoole\Redis\Server;

  3. $server = new Server("127.0.0.1", 9501, SWOOLE_PROCESS );

  4. $server->set(array(

  5.     'task_worker_num' => 32,

  6.     'worker_num' => 1,

  7.     'task_enable_coroutine' => true,

  8.     'heartbeat_check_interval' => 5,

  9.     'heartbeat_idle_time' => 10,

  10. ));

  11. $server->setHandler('LPUSH', function ($fd, $data) use ($server) {

  12.     $taskId = $server->task($data);

  13.     if ($taskId === false) {

  14.         $server->send($fd, Server::format(Server::ERROR));

  15.     } else {

  16.         $server->send($fd, Server::format(Server::INT, $taskId));

  17.     }

  18. });

  19. $server->on('Finish', function($serv, $taskID, $data) {

  20.     $stats = $serv->stats();

  21.     if ($stats['tasking_num'] > 10) { //tasking_num 当前正在排队的任务数

  22.         echo "剩余任务信息:" . json_encode($serv->stats()) . "\n";

  23.     }

  24. });

  25. $server->on('Task', function ($serv, $data) {

  26.     go(function () {

  27.         usleep(50000);

  28.     });

  29.     var_dump($data);

  30. });

  31. $server->start();
复制代码
task 里面 usleep (50000); 模拟任务执行时间
● 新建 Queue.php
● 代码如下
  1. <?php

  2. $redis = new Redis;

  3. $redis->connect('127.0.0.1', 9501);

  4. $x=1;

  5. while($x <= 1000) {

  6.   $redis->lpush("myqueue", json_encode(array("hello".$x, "swoole")));

  7.   $x++;

  8. }
复制代码
模拟 1000 的任务投递
经测试,1 秒处理完毕
可以根据 Task 任务执行的速度调节 task_worker_num 控制启动的进程数量

● 这些进程是由 swoole 底层负责管理的,在发生致命错误或进程退出后底层会重新创建新的任务进程
task_worker_num

● 最大值不得超过 SWOOLE_CPU_NUM * 1000
● 单个 task 的处理耗时,如 100ms,那一个进程 1 秒就可以处理 1/0.1=10 个 task
● task 投递的速度,如每秒产生 2000 个 task
● 2000/10=200,需要设置 task_worker_num => 200,启用 200 个 task 进程

分享到 :
0 人收藏

3 个回复

倒序浏览
周见智  金牌会员 | 2019-11-21 02:43:03
啊啊啊啊啊啊啊啊啊啊啊
wolfy  高级会员 | 2019-12-5 19:41:15
呵呵。。。
陈希章  高级会员 | 2019-12-15 07:22:28
我擦!我要沙发!
您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

举报|Archiver|手机版|小黑屋|Lvchakeji Inc.  

Powered by Discuz! X3.3 © 2001-2016 Comsenz Inc.

返回顶部