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

前端之家收集整理的这篇文章主要介绍了Swoole来实现实时异步任务队列前端之家小编觉得挺不错的,现在分享给大家,也给大家做个参考。

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

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

PHP ->serv = swoole_server("0.0.0.0",9501 ->serv->set( 'worker_num' => 1,cpu数的1-4倍 '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

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的方式异步执行。

原文链接:https://www.f2er.com/php/403010.html

猜你在找的PHP相关文章