PHP 异步通知(微信通知,短信通知,邮件通知)怎么做?如果全部等待返回结果会卡死

2019-04-02 09:48:26 +08:00
 yanluya

最近在做 php 客户订单通知的功能,加入了微信通知,短信通知,邮件通知。可是时间一长,客户提交订单很慢,而且有时候会请求超时,必须用异步通知来,大家有好的解决方法吗?

6853 次点击
所在节点    PHP
37 条回复
jason56
2019-04-02 11:34:32 +08:00
swoole +1
jadec0der
2019-04-02 11:46:35 +08:00
@yanluya 如果你一定想异步的话可以用 pcntl ( https://www.php.net/manual/en/book.pcntl.php) 开进程,但是这不是 php 的 best practice
Felldeadbird
2019-04-02 11:49:07 +08:00
将通知拆分啊,然后交给前端去触发。这样就不怕延时了。
qiyuey
2019-04-02 11:49:41 +08:00
MQ 啊
sujin190
2019-04-02 11:55:34 +08:00
另外弄个小发送服务呗,用 grpc、thrift 啥的弄个也很快了,几分钟就搞定,单量少,也就不需要考虑那么多了,加到 supervisor 进程管理里,很简单了

或者更简单的,另外写个接口发送通知,再用 fscokopen 构造一个 http 请求,但是不等待返回就是了
archersgz
2019-04-02 12:56:46 +08:00
swoole
mmixxia
2019-04-02 13:47:08 +08:00
队列,定时检查,超时重发
dorothyREN
2019-04-02 14:16:09 +08:00
那么这位老哥 短信接口要不要了解一下
Dogergo
2019-04-02 14:38:16 +08:00
这种通知,当然一开始就要考虑异步吧,我们之前是 go 脚本+redis 队列搞的,一直跑
xman99
2019-04-02 14:44:09 +08:00
其实不用那么高超的技术的

把任务写入 redis,php 定时任务去消费就好。

感觉这些都不能满足业务需求, 可以考虑下 入坑 swoole,swoole 坑不小。 如果考虑其他语言,go 是不错选择
ducklyl
2019-04-02 15:57:32 +08:00
插到队列表,跑脚本处理
askfilm
2019-04-02 16:50:06 +08:00
感觉这些都不能满足业务需求, 可以考虑下 入坑 go,go 坑不小。 如果考虑其他方式,swoole 是不错选择
askfilm
2019-04-02 16:50:55 +08:00
说到底, swoole 坑不小到底是啥? :)
jamblues
2019-04-02 23:27:10 +08:00
扯语言,远了~

容易且不靠 swoole 实现的方案

前台:

task - push list - Redis 队列

后台:
启动 php 长驻进程,pop 原子操作,可以视任务开多个。

nohup php deamon.php > deamon.log &

do {
// redis 取任务
task.lpop();
// do task

// 重载条件 or 中止条件
} while(true);

当然,这个方案也不是这么简单,
如果只是发个邮件简单的 http 请求够用了。
但如果要复杂的话,
还要考虑像 mysql redis 这种长时间保持连接
以及业务大了以后的内存控制,锁,单例维护,扩展性和灵活性等等。
qianbi6
2019-04-11 16:16:21 +08:00
我们用 swoole 发的。
lhfdeamon
2019-04-13 00:08:19 +08:00
短连接了解一下
qY3209HZitEb5Zty
2019-04-14 16:49:04 +08:00
给个 token 让前端异步去调用

这是一个专为移动设备优化的页面(即为了让你能够在 Google 搜索结果里秒开这个页面),如果你希望参与 V2EX 社区的讨论,你可以继续到 V2EX 上打开本讨论主题的完整版本。

https://www.v2ex.com/t/551104

V2EX 是创意工作者们的社区,是一个分享自己正在做的有趣事物、交流想法,可以遇见新朋友甚至新机会的地方。

V2EX is a community of developers, designers and creative people.

© 2021 V2EX