|基于Swoole的异步Task任务

|基于Swoole的异步Task任务

文章图片



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

  • 如何在 Swoole 中实现异步 Task 任务?
  • Swoole 的异步 Task 任务的使用场景有哪些?
一、如何在 Swoole 中实现异步 Task 任务?
在服务端程序中如果要执行一些耗时的操作(比如Web服务器中发送邮件、发送短信等) , 如果直接去顺序执行这些操作 , 程序就会阻塞当前进程 , 导致服务器响应变慢 。 通常的做法是使用异步脚本或者消息队列来完成这些操作 。 通过 Swoole 如何实现异步任务处理呢?
Swoole中提供异步处理的功能 , 可以投递一个异步任务到TaskWorker进程池中执行 , 不影响当前请求的处理速度 。 新建文件 , 命名为task_server.php , 代码如下:

【|基于Swoole的异步Task任务】在命令行执行如下命令即可运行程序:php task_server.php上面的代码创建了一个TCP服务 , 同时设置了4个taskWorker进程 , 同时实现了 onTask 和 onFinish 2个事件回调函数 。 当客户端与服务端建立连接后 , 客户端发送消息会触发上面代码中的 receive 事件 。 在 receive 事件中会调用 $serv->task() 函数 , 执行 task 任务 , 程序会立即返回 , 继续向下执行代码 。 OnTask 回调函数在 TaskWorker 进程中被异步执行 。 执行完成后调用 $serv->finish() 函数返回结果(finish回调函数是可选事件 , 也可以不设置) 。 Swoole的 Task 任务适合处理一些耗时的操作 , 如发送邮件、发送短信、推送消息等 。 例如在上面代码中 , onReceive 回调事件被触发后 , 就可以执行 $serv->task() 来执行一个异步任务 。 注意事项:如果要投递任务 , 需要在配置文件中 task_worker_num 必须要设置 , 否则会报错 。


    推荐阅读