如何使用workerman处理后台耗时操作
答案:1 悬赏:20 手机版
解决时间 2021-02-12 07:12
- 提问者网友:相思似海深
- 2021-02-11 06:51
如何使用workerman处理后台耗时操作
最佳答案
- 五星知识达人网友:玩世
- 2021-02-11 07:36
mail_worker.php
use Workerman\Worker;
require_once './Workerman/Autoloader.php';
// mail worker,和调用端使用Text协议通讯
$mail_worker = new Worker('Text://0.0.0.0:12345');
// 如果发送邮件很慢,mail进程数可以根据需要多开一些
$mail_worker->count = 80;
$mail_worker->name = 'MailWorker';
$mail_worker->onMessage = function($connection, $mail_data)
{
// 直接返回ok,避免调用端长时间等待
$connection->send('ok');
// 假设发来的是json数据
$mail_data = json_decode($mail_data, true);
// 根据mail_data发邮件,如果需要失败重发,
// 可以把失败的邮件任务放到mysql里面,
// 做个定时器定时扫描失败邮件重新发送
your_send_mail_func($mail_data);
};
if(!defined('GLOBAL_START'))
{
Worker::runAll();
}
在你的项目中这样与mail_worker通讯发邮件。
//$ip = "mail_worker 的ip" ,本机的话为127.0.0.1
$socket = stream_socket_client("tcp://$ip:12345", $errno, $errmsg, 5);
if(!$socket) echo $errmsg;
$mail_data = array("from"=>"...", "to"=>"...", "content"=>"...");
// 注意,Text协议后面"\n"换行符是必须的
$mail_buffer = json_encode($mail_data)."\n";
// 发送给mail worker
fwrite($socket, $mail_buffer);
这样就可以异步发邮件了,防止主流程被发邮件阻塞,大大加快下单响应时间。
其实下单后能够在网站上实时通知也是个不错的体验,用户这边下单后,商家在网站上立刻得到通知,效果图类似
接入非常简单
use Workerman\Worker;
require_once './Workerman/Autoloader.php';
// mail worker,和调用端使用Text协议通讯
$mail_worker = new Worker('Text://0.0.0.0:12345');
// 如果发送邮件很慢,mail进程数可以根据需要多开一些
$mail_worker->count = 80;
$mail_worker->name = 'MailWorker';
$mail_worker->onMessage = function($connection, $mail_data)
{
// 直接返回ok,避免调用端长时间等待
$connection->send('ok');
// 假设发来的是json数据
$mail_data = json_decode($mail_data, true);
// 根据mail_data发邮件,如果需要失败重发,
// 可以把失败的邮件任务放到mysql里面,
// 做个定时器定时扫描失败邮件重新发送
your_send_mail_func($mail_data);
};
if(!defined('GLOBAL_START'))
{
Worker::runAll();
}
在你的项目中这样与mail_worker通讯发邮件。
//$ip = "mail_worker 的ip" ,本机的话为127.0.0.1
$socket = stream_socket_client("tcp://$ip:12345", $errno, $errmsg, 5);
if(!$socket) echo $errmsg;
$mail_data = array("from"=>"...", "to"=>"...", "content"=>"...");
// 注意,Text协议后面"\n"换行符是必须的
$mail_buffer = json_encode($mail_data)."\n";
// 发送给mail worker
fwrite($socket, $mail_buffer);
这样就可以异步发邮件了,防止主流程被发邮件阻塞,大大加快下单响应时间。
其实下单后能够在网站上实时通知也是个不错的体验,用户这边下单后,商家在网站上立刻得到通知,效果图类似
接入非常简单
我要举报
如以上问答信息为低俗、色情、不良、暴力、侵权、涉及违法等信息,可以点下面链接进行举报!
大家都在看
推荐资讯