资讯专栏INFORMATION COLUMN

使用swoole实现异步任务处理

xuhong / 1271人阅读

摘要:使用实现异步任务处理,有以下几个目标能够异步非阻塞处理任务能够实时查询任务状态任务完成之后,可以执行一些操作或者回调内置的正好非常适合处理这种业务,示例代码实现如下存储任务处理结果和进度请求过滤返回任务状态此处处理请求数

使用swoole实现异步任务处理,有以下几个目标:

能够异步非阻塞处理任务

能够实时查询任务状态

任务完成之后,可以执行一些操作或者回调

swoole内置的swoole_http_server正好非常适合处理这种业务,示例代码实现如下

php#!/bin/env php
connect("127.0.0.1", 6379);

$http->set([
    "worker_num" => 2,
    "open_tcp_nodelay" => true,
    "task_worker_num" => 2,
    "daemonize" => true,
    "log_file" => "/tmp/swoole_http_server.log",
]);

$http->on("request", function(swoole_http_request $request, swoole_http_response $response) use ($http, $redis) {
    //请求过滤
    if($request->server["path_info"] == "/favicon.ico" || $request->server["request_uri"] == "/favicon.ico"){
        return $response->end();
    }   
    $taskId = isset($request->get["taskId"]) ? $request->get["taskId"]: ""; 
    if($taskId !== ""){
        //返回任务状态
        $status = $redis->get($taskId);
        return $response->end("task: $taskId;status: $status");
    }   
    $params = json_encode(array(111,222));//此处处理requst请求数据作为任务执行的数据,根据需要修改
    $taskId = $http->task($params);
    $response->end("

Do task:$taskId.

"); }); $http->on("Finish", function($serv, $taskId, $data){ //TDDO 任务结束之后处理任务或者回调 echo "$taskId task finish"; }); $http->on("task", function($serv, $taskId, $fromId, $data) use($redis){ //任务处理,可以把处理结果和状态在redis里面实时更新,便于获取任务状态 for($i = 0; $i < 100;$i++){ $redis->set($taskId, $i); sleep(1); } return $i;//必须有return 否则不会调用onFinish }); $http->start();

如有更好方案,请多多指教。

文章版权归作者所有,未经允许请勿转载,若此文章存在违规行为,您可以联系管理员删除。

转载请注明本文地址:https://www.ucloud.cn/yun/30230.html

相关文章

  • PHP 使用 Swoole - TaskWorker 实现异步操作 Mysql

    摘要:要实现上述的异步处理,只需要增加两个事件回调即可和这两个回调函数分别用于执行任务和处理任务的返回结果。还需要注意的是,服务器如果检测到长时间没有没有查询,则会断开连接回收资源所以要有断线重连的机制。 在一般的 Server 程序中都会有一些耗时的任务,比如:发送邮件、聊天服务器发送广播等。如果我们采用同步阻塞的防水去执行这些任务,那么这肯定会非常的慢。 Swoole 的 TaskWor...

    CKJOKER 评论0 收藏0
  • swoole入门4-初识swoole

    摘要:当某种网络事件发生时,会回调用户设置的指定回调函数。承担了底层网络事件的监听及各种底层事件处理,当收到请求时,会触发事件提醒,然后将控制权转交预先注册的事件回调函数,来进行后续的处理。请求到来时创建,请求结束后销毁。 运行流程图 showImg(https://segmentfault.com/img/remote/1460000017207791);showImg(https://s...

    forsigner 评论0 收藏0
  • PHP并发IO编程之路

    摘要:下文如无特殊声明将使用进程同时表示进程线程。收到数据后服务器程序进行处理然后使用向客户端发送响应。现在各种高并发异步的服务器程序都是基于实现的,比如。 并发 IO 问题一直是服务器端编程中的技术难题,从最早的同步阻塞直接 Fork 进程,到 Worker 进程池/线程池,到现在的异步IO、协程。PHP 程序员因为有强大的 LAMP 框架,对这类底层方面的知识知之甚少,本文目的就是详细介...

    Riddler 评论0 收藏0

发表评论

0条评论

最新活动
阅读需要支付1元查看
<