最近在做 php 客户订单通知的功能,加入了微信通知,短信通知,邮件通知。可是时间一长,客户提交订单很慢,而且有时候会请求超时,必须用异步通知来,大家有好的解决方法吗?
最近在做 php 客户订单通知的功能,加入了微信通知,短信通知,邮件通知。可是时间一长,客户提交订单很慢,而且有时候会请求超时,必须用异步通知来,大家有好的解决方法吗?
|
blackjarApr 2, 2019
1
队列
|
|
zjsxwcApr 2, 2019 via Android
2
单独跑个进程处理啊,最简单可以用 Jenkins 一个 jar 包搞定
|
|
klgdApr 2, 2019
3
消息队列,我们现在就是把消息通知放到 rabbitmq 上发的
|
|
rxzxf1993Apr 2, 2019
4
swoole
|
|
iSecretApr 2, 2019
5
队列,通知一类耗时的任务全部丢到 redis 一类的介质里,后台搞个脚本去执行。
|
|
fuxkcsdnApr 2, 2019 via iPhone
6
标准答案上队列
无脑方案,fastcgi_finish_request |
|
MokerApr 2, 2019
7
php-resque PHP 队列的一个实现 基于 Redis List 也可以自己实现
|
|
Light3Apr 2, 2019
8
队列 阿里云就有 其实就 redis 搞个队列 然后放进去 单独开一个进程 一直跑
|
|
tomczhenApr 2, 2019 via Android
9
laravel queues
|
|
RyanOneApr 2, 2019
10
简单一点的 fsockopen
|
|
gabezhaoApr 2, 2019
11
swoole
|
|
phpcxyApr 2, 2019
12
队列
|
|
xnodeApr 2, 2019
13
简单 fsockopen 标准 队列 其他的 Guzzle
|
|
14
队列应该是处理并发量大的订单和秒杀一类的商品比较好,像下单频率很低,有时一天才 2 单这样的,用队列会不会大材小用?
|
|
chinvoApr 2, 2019
15
laravel/think queue
|
|
chengran630Apr 2, 2019
16
- -
建一个表,然后定时执行,处理表中的通知,发送.... 简单 好维护,不需要其他的成本 |
|
m939594960Apr 2, 2019
17
@yanluya #14 不会,耗时任务 php 不用 swoole 类的东西 只能用队列
|
|
codebear01Apr 2, 2019
18
插到队列表,跑脚本处理
|
|
19
php 没有异步程序吗?像 Java 那种开线程池,跑线程??
|
|
jason56Apr 2, 2019
21
swoole +1
|
|
jadec0derApr 2, 2019
22
@yanluya 如果你一定想异步的话可以用 pcntl ( https://www.php.net/manual/en/book.pcntl.php) 开进程,但是这不是 php 的 best practice
|
|
FelldeadbirdApr 2, 2019
23
将通知拆分啊,然后交给前端去触发。这样就不怕延时了。
|
|
qiyueyApr 2, 2019
24
MQ 啊
|
|
sujin190Apr 2, 2019
25
另外弄个小发送服务呗,用 grpc、thrift 啥的弄个也很快了,几分钟就搞定,单量少,也就不需要考虑那么多了,加到 supervisor 进程管理里,很简单了
或者更简单的,另外写个接口发送通知,再用 fscokopen 构造一个 http 请求,但是不等待返回就是了 |
|
archersgzApr 2, 2019
26
swoole
|
|
1nakaELYBbsXbZxYApr 2, 2019
27
队列,定时检查,超时重发
|
|
dorothyRENApr 2, 2019
28
那么这位老哥 短信接口要不要了解一下
|
|
DogergoApr 2, 2019
29
这种通知,当然一开始就要考虑异步吧,我们之前是 go 脚本+redis 队列搞的,一直跑
|
|
xman99Apr 2, 2019
30
其实不用那么高超的技术的
把任务写入 redis,php 定时任务去消费就好。 感觉这些都不能满足业务需求, 可以考虑下 入坑 swoole,swoole 坑不小。 如果考虑其他语言,go 是不错选择 |
|
ducklylApr 2, 2019
31
插到队列表,跑脚本处理
|
|
askfilmApr 2, 2019
32
感觉这些都不能满足业务需求, 可以考虑下 入坑 go,go 坑不小。 如果考虑其他方式,swoole 是不错选择
|
|
askfilmApr 2, 2019
33
说到底, swoole 坑不小到底是啥? :)
|
|
34
扯语言,远了~
容易且不靠 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 这种长时间保持连接 以及业务大了以后的内存控制,锁,单例维护,扩展性和灵活性等等。 |
|
qianbi6Apr 11, 2019
35
我们用 swoole 发的。
|
|
lhfdeamonApr 13, 2019 via Android
36
短连接了解一下
|
|
qY3209HZitEb5ZtyApr 14, 2019
37
给个 token 让前端异步去调用
|