swoole task 异步原理以及使用简例
2021-10-22 本文已影响0人
小马过河R
task进程适用场景
情景一:管理员需要给100W用户发送邮件,当点击发送,浏览器会一直转圈,直到邮件全部发送完毕。
情景二:千万微博大V发送一条微博,其关注的粉丝相应的会接收到这个消息,是不是大V需要一直等待消息发送完成,才能执行其它操作
从我们理解的角度思考,这其实都是php进程一直被阻塞,客户端才一直在等待服务端的响应,我们的代码就是同步执行的。
对于用户而言,这就是漫长的等待。如何优雅的提高用户体验就是一个非常棘手的问题。
![](https://img.haomeiwen.com/i1430582/f50222d28226f0cd.png)
使用 task 的前题:
1、在 Server 中 配置 task_worker_num 数量。
2、设置 Server 的 onTask 和 onFinish 事件回调函数。
WebSocket服务异步投递任务为例(很好的例文)
![](https://img.haomeiwen.com/i1430582/8466dbfbb276cdcd.png)
浏览器会先收到 正常 返回echo ...666的响应,然后再收到异步的 echo ...success。 onFinish不是必须的,也就是浏览器不必阻塞等待异步的响应且可以不处理异步任务返回。