永发信息网

如何使用workerman处理后台耗时操作

答案:1  悬赏:20  手机版
解决时间 2021-02-12 07:12
如何使用workerman处理后台耗时操作
最佳答案
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);

这样就可以异步发邮件了,防止主流程被发邮件阻塞,大大加快下单响应时间。

其实下单后能够在网站上实时通知也是个不错的体验,用户这边下单后,商家在网站上立刻得到通知,效果图类似

接入非常简单
我要举报
如以上问答信息为低俗、色情、不良、暴力、侵权、涉及违法等信息,可以点下面链接进行举报!
大家都在看
笔记本的WIFI老是掉线,但右下角却显示无线网
我交通银行的信用卡账单日是2号,我如果3号刷
在建造合同的结果不能可靠估计的情况下,下列
刀锋之影厉害吗
杭州博采贸易有限公司地址在哪,我要去那里办
长沙自然景点有哪些
大家谈谈QQ和微信抢红包心得,什么叫开挂?
魔域刷球对战斗力的要求很高吗
显卡更新之后就变成这样了,一进入睡眠就无法
缘人高考美术培训怎么去啊,有知道地址的么
时钟1点敲1下、2点敲2下,每半点再敲1下,请问
达令家骗局,是传销吗
在 百度是 打广告一天需要多少钱
为什么我qq里有一位好友发空间说话,直接我看
求《情倾天下》完整TXT
推荐资讯
汉武帝和陈皇后是政治联姻还是两情相悦 陈皇
湖南大学中加能源环境生态中心在哪里啊,我有
西普大陆诸葛烤瑜怎么得 在哪得
三丰物贸在哪里啊,我有事要去这个地方
学苑一路/文化南路(路口)地址在哪,我要去那
无心法师2苏桃爸爸死了吗?苏桃为什么误会无
2016年下半年考幼师资格证,一门为合格一门为
周冬雨家在石家庄市哪个地方
指亚洲的东南部国家和地区,两个字,后面一个
黄猄的胆有什么药用价值
运河北岸路/S244(路口)在什么地方啊,我要过
真三有吗,刚到求带,VS11级
正方形一边上任一点到这个正方形两条对角线的
阴历怎么看 ?