基于Swoole的异步Task任务

2020年7月15日 307点热度 0人点赞 0条评论

图片


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

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

  • Swoole 的异步 Task 任务的使用场景有哪些?


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


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


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

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

图片


在命令行执行如下命令即可运行程序:
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 必须要设置,否则会报错。
来源:https://baijiahao.baidu.com/s?id=1659775719658143001


岁月峥嵘

不忘初心

图片
-PHP开源社区-


平庸懒惰

不求上进

34820基于Swoole的异步Task任务

这个人很懒,什么都没留下

文章评论