zoukankan      html  css  js  c++  java
  • 使用swoole 异步毫秒定时器 实现一个简易restful定时器

    #文档地址https://wiki.swoole.com/wiki/page/244.html

    首先说思路

    swoole服务可以常驻内存

    所以可以向swoole work进程添加定时器任务 

    简单实现

    demo地址 https://github.com/flyflyhe/swoole-timer

    ##首先配置swoole http server 注意 work_num 要设置为1  因为如果大于1 定时器就会随机注册到不同的work进程中

    $httpServer = new swoole_http_server(LISTEN_IP, LISTEN_PORT);
    $httpServer->set([
        'task_worker_num' => 10,
    
        #如果设置work进程执行过几次就会重启 定时器就消失
        #'max_request' => 2, 默认为0 work进程永不reload
        #woker_num 设置为1 防止定时器找不到进程
        'worker_num' => 1,
        'user' => 'www',
        'group' => 'www'
    ]);

    ##设置task进程 所有定时器中执行的任务都应该投递到task进程中 因为work进程只有一个 不能让她阻塞

    $httpServer->on('task', function (swoole_server $server, $task_id, $from_id, $data) {
        echo "$task_id$from_id 获取到数据".$data.PHP_EOL;
        echo exec("/usr/bin/php /tmp/e.php");
        $server->finish($data);
    });
    
    $httpServer->on('finish', function (swoole_server $server, $task_id, $data) {
    
    });

    ##监听request 请求 设置定时器

    $httpServer->on('request', function (swoole_http_request $request, swoole_http_response $response) use ($httpServer, $timeStore, $app) {
         $timerId = $server->tick(2000, function()use($httpServer) {
          $httpServer->task('hh');
         });
         $httpServer->task('hh'); $response->write("timer id $timerId"); } }); echo 'listen: '.LISTEN_IP.' port:'.LISTEN_PORT.PHP_EOL; $httpServer->start();
  • 相关阅读:
    分布式缓存系统Memcached
    HTTP(GET/POST)请求过程中的编码问题
    将指定的Json字符串转为指定的T类型对象(转帖)
    Linux 中有几个文件压缩和解压缩工
    策略添加-通过域策略组自动映射共享文件夹
    Centos 7 加AD域
    Gns3 模拟器创建VLAN
    防火墙常用命令
    Centos 6 任务计划配置
    Cenots 7 开启 SSH_远程连接
  • 原文地址:https://www.cnblogs.com/a-flydog/p/9570252.html
Copyright © 2011-2022 走看看