本节将从如下两方面讲述Swoole Task任务:
一、如何在 Swoole 中实现异步 Task 任务?
在服务端程序中如果要执行一些耗时的操作(比如Web服务器中发送邮件、发送短信等),如果直接去顺序执行这些操作,程序就会阻塞当前进程,导致服务器响应变慢。通常的做法是使用异步脚本或者消息队列来完成这些操作。通过 Swoole 如何实现异步任务处理呢?
Swoole中提供异步处理的功能,可以投递一个异步任务到TaskWorker进程池中执行,不影响当前请求的处理速度。
新建文件,命名为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 必须要设置,否则会报错。
来源:https://baijiahao.baidu.com/s?id=1659775719658143001
文章评论