• 技术文章 >后端开发 >php教程

    Swoole在PHP-fpm/apache中使用task功能

    藏色散人藏色散人2019-10-09 18:02:47转载1220

    1.jpg

    ● 新建 RedisServer.php

    ● 代码如下

    <?php
    use Swoole\Redis\Server;
    $server = new Server("127.0.0.1", 9501, SWOOLE_PROCESS );
    $server->set(array(
        'task_worker_num' => 32,
        'worker_num' => 1,
        'task_enable_coroutine' => true,
        'heartbeat_check_interval' => 5,
        'heartbeat_idle_time' => 10,
    ));
    $server->setHandler('LPUSH', function ($fd, $data) use ($server) {
        $taskId = $server->task($data);
        if ($taskId === false) {
            $server->send($fd, Server::format(Server::ERROR));
        } else {
            $server->send($fd, Server::format(Server::INT, $taskId));
        }
    });
    $server->on('Finish', function($serv, $taskID, $data) {
        $stats = $serv->stats();
        if ($stats['tasking_num'] > 10) { //tasking_num 当前正在排队的任务数
            echo "剩余任务信息:" . json_encode($serv->stats()) . "\n";
        }
    });
    $server->on('Task', function ($serv, $data) {
        go(function () {
            usleep(50000);
        });
        var_dump($data);
    });
    $server->start();

    task 里面 usleep (50000); 模拟任务执行时间

    ● 新建 Queue.php

    ● 代码如下

    <?php
    $redis = new Redis;
    $redis->connect('127.0.0.1', 9501);
    $x=1; 
    while($x <= 1000) {
      $redis->lpush("myqueue", json_encode(array("hello".$x, "swoole")));
      $x++;
    }

    模拟 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 进程

    相关推荐:【PHP教程

    以上就是Swoole在PHP-fpm/apache中使用task功能的详细内容,更多请关注php中文网其它相关文章!

    声明:本文转载于:learnku,如有侵犯,请联系admin@php.cn删除
    专题推荐:PHP Swoole
    上一篇:php-fpm的reload过程 下一篇:关于PHP Mysqli函数的一些整理以及详细介绍(一)
    大前端线上培训班

    相关文章推荐

    • Swoole协程与传统fpm同步模式比较• Swoole自定义项目初始化事件处理的实现• thinkphp 6.0 swoole扩展websocket使用教程• Laravel集成Swoole教程

    全部评论我要评论

  • 取消发布评论发送
  • 1/1

    PHP中文网