加入收藏 | 设为首页 | 会员中心 | 我要投稿 安卓应用网 (https://www.0791zz.com/)- 科技、建站、经验、云计算、5G、大数据,站长网!
当前位置: 首页 > 编程开发 > PHP > 正文

Swoole来实现实时异步任务队列

发布时间:2020-05-25 03:37:06 所属栏目:PHP 来源:互联网
导读:假如要发100封邮件,for循环100遍,用户直接揭竿而起,什么破网站!但实际上,我们很可能有超过1万的邮件。怎么处理这个延迟的问题?答案就是用异步。把“发邮件”这个操作封装,然后后台异步地执行1万遍。这样的话,用户提交网页后,他所等待的时间只是“把

假如要发100封邮件,for循环100遍,用户直接揭竿而起,什么破网站!
但实际上,我们很可能有超过1万的邮件。怎么处理这个延迟的问题?
答案就是用异步。把“发邮件”这个操作封装,然后后台异步地执行1万遍。这样的话,用户提交网页后,他所等待的时间只是“把发邮件任务请求推送进队列里”的时间。而我们的后台服务将在用户看不见的地方跑。
在实现“异步队列”这点上,有人采用表或者redis来存放待发送的邮件,然后,每分钟定时读取待发送列表,然后处理。这便是定时异步任务队列。但当前提交的任务要一分钟后才能执行,在某些实时性要求应用场景里还是不快。有些场景要求,只有一提交任务,便马上执行,但用户不需要等待返回结果。
本文将探讨用php扩展swoole实现实时异步任务队列的方案。

在打算放置脚本的目录(你也可以自行新建)新建Server.php,代码如下

serv = swoole_server("0.0.0.0",9501 ->serv->set( 'worker_num' => 1, 'daemonize' => 1, 'max_request' => 10000, 'dispatch_mode' => 2, 'task_worker_num' => 8, "task_ipc_mode " => 3, "log/taskqueueu.log",//日志 ->serv->on('Receive',(,'onReceive' ->serv->on('Task','onTask' ->serv->on('Finish','onFinish' ->serv-> onReceive(swoole_server ,,, ->task( onTask(,, = json_decode(, (['url' ->httpGet(['url'],['param' onFinish(, httpGet(, ( .= '?' . ( = curl_init(); curl_setopt(,CURLOPT_URL,); curl_setopt(,CURLOPT_RETURNTRANSFER,1); curl_setopt(,CURLOPT_SSL_VERIFYPEER, curl_setopt(,CURLOPT_SSL_VERIFYHOST, curl_setopt(,CURLOPT_HEADER,0); = curl_exec(); curl_close(); = Server();

启动服务后,让我们看看如何调用服务。新建测试文件Client_test.php

client = (!->client->connect("127.0.0.1",9501,1 (('Swoole Error: %s',->client-> send( (->client-> (!( = json_encode( ->client->send( } ('Swoole Server does not connected.' ->client-> = "url" => "http://192.168.10.19/send_mail", "param" => "username" => 'test', "password" => 'test' = -> (->send( 'success' } 'fail' ->close();

在上面代码中,url即为任务所在地址,param为所需传递参数。
保存好代码,在命令行或者浏览器中执行Client_test.php,便实现了异步任务队列。你所填写的URL,将会在每次异步任务被提交后,以HTTP GET的方式异步执行。

(编辑:安卓应用网)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!

    推荐文章
      热点阅读