首页 > 其他分享 >Swoole 的异步 Task 任务详解

Swoole 的异步 Task 任务详解

时间:2022-09-29 18:00:50浏览次数:90  
标签:异步 Task Swoole 任务 task 执行

本文将从下面两方面讲述 Swoole Task 任务:

1. 如何在 Swoole 中实现异步 Task 任务?

2.Swoole 的异步 Task 任务在 CRMEB 电商系统中的使用场景有哪些?

一、如何在 Swoole 中实现异步 Task 任务?

如果一些耗时的操作要在服务器端程序中执行 (例如,在 Web 服务器中发送电子邮件和短消息等。),如果直接按顺序执行这些操作,程序会阻塞当前进程,导致服务器响应缓慢。通常的做法是使用异步脚本或消息队列来完成这些操作。如何通过 Swoole 实现异步任务处理?

Swoole 提供了异步处理的功能,可以将一个异步任务发布到 TaskWorker 进程池中执行,而不影响当前请求的处理速度。

新建文件,命名为 task_server.php,代码如下:

Swoole 的异步 Task 任务详解_task

在命令行执行如下命令即可运行程序:

php task_server.php

上面的代码创建了一个 TCP 服务,同时设置了四个 taskWorker 进程,实现了两个事件回调函数 onTask 和 onfinish。当客户端与服务器建立连接时,客户端发送的消息将触发上面代码中的 receive 事件。在 receive 事件中,会调用 $serv->task () 函数来执行任务,程序会立即返回,继续向下执行代码。OnTask 回调函数在 TaskWorker 进程中异步执行。执行后调用 $serv->finish () 函数返回结果 (finish 回调函数是可选事件,可以不设置)。

二、Swoole 的 Task 任务适合处理一些耗时的操作,如发送邮件、发送短信、推送消息等。

例如在上面代码中,onReceive 回调事件被触发后,就可以执行 $serv->task () 来执行一个异步任务。

注意事项:

如果要投递任务,需要在配置文件中 task_worker_num 必须要设置,否则会报错

完整附件​​点此下载 ​

标签:异步,Task,Swoole,任务,task,执行
From: https://blog.51cto.com/u_15723831/5723654

相关文章

  • lemonLime 配置 SPJ 与 Subtask 测评
    目录lemon配置SPJ与Subtask测评前言软件下载null参考文章lemon配置SPJ与Subtask测评前言我要来吹牛皮了,就为了一场测试题的SPJ评测方式,我一个人百度查资......
  • camunda_10_script_task_access_variable
    scripttask访问流程变量的方法通过inputs读取流程变量在inputs中定义一个新的input,可以设定一个local变量,选择类型为:string/expression,取值可以是基于流程变......
  • react forEach 里面 异步更新 setState
    如题要是等数组处理好,再setState中间就会卡一段时间const[list,setList]=useState([]);letarr=[]for(constitemofsourceList){letdd=await......
  • JavaScript异步加载的三种方式——async、defer、动态创建
    async和deferhtml4.0中定义了defer;html5.0中定义了async。如果没有defer和async,浏览器会立即加载并执行指定的JS脚本,并不会等待后续载入的文档元素。如果有async,加载后......
  • js异步编程的三种模式
    写在前面javascript语言的执行环境是"单线程"(singlethread),就是指一次只能完成一件任务。如果有多个任务,就必须排队,等前面一个任务完成,再执行后面一个任务,以此类推。......
  • tornado 执行 asyncio 异步报错 run_forever assert self._self_reading_future is N
    报错信息:python38\lib\asyncio\windows_events.py",line314run_forever assertself._self_reading_futureisNone解决如下:需要引入nest_asyncio,代码如下:importnest_......
  • Lock和Condition(下):Dubbo如何用管程实现异步转同步?
    1)Lock和Condition实现的管程在方法的调用上和sychronized有什么不同?前者用await(),signal(),signalAll()。后者使用wait,notify(),notifiAll();2)本节我们要探究dubbo异步......
  • Java中的异步与线程池 保姆级教学
    Java中的异步与线程池保姆级教学2022-09-2509:10·Java架构师鸨哥初始化线程的4种方式1、继承ThreadThread01thread01=newThread01(); thread01.start();......
  • camunda_08_task_exception
    异常的分类业务异常:最主要的情形是,业务参数不合理,比如请假天数小于等于零,当然这类参数最好是在流程发起前做validate,不要遗留到流程签核过程中.技术异常:程......
  • C#-等待异步函数执行结果
    另把你需要调用的异步函数变为普通的执行顺序,即非异步执行顺序经过查阅,只需要一句:varresult=Task.Run(async()=>awaityourAsyncMethod()).Result;对于没有返回......