请教一个关于 Laravel 队列的问题

2017-07-10 17:37:46 +08:00
 PHPNewbie

我的情况是这样的:

有一个外部网站的接口,用户在我的 Laravel 站点查询某些信息时,我的站点会去请求这个外部接口,获得数据后返回给用户。 但这个外部接口不能被同时频繁请求,同时请求会被接口服务器短暂封禁 IP 半个小时,当我的站点有多个用户同时在查询信息时,就容易发生这种情况。

我想用 Laravel 的队列来处理,用户前台查询信息时,我的站点后台会将这个请求加入队列,依次去请求那个外部 API。

但 Laravel 队列是异步的,无法将队列中接口请求到的信息即时返回给用户,只能将返回的数据存储起来。

请问:

1、Laravel 队列中可以将任务的返回值返回给前台用户吗,如果有,该怎么实现?

2、对于上述我的需求,是否有更好的实现方式?(或者说,我上述需求是否符合 Laravel 队列的适用场景?如果不适合,有适合的实现方式吗)

3173 次点击
所在节点    PHP
8 条回复
freehere
2017-07-10 18:29:58 +08:00
不合适,加缓存吧,相同的东西多长时间返回相同的信息就好了,具体看你们的业务逻辑了
ghostheaven
2017-07-10 18:32:52 +08:00
ajax 轮询或者 websocket
caniuse
2017-07-10 19:03:35 +08:00
用队列是对的,你还需要即时通讯,可以考虑集成环信等免费的即时通讯功能,自己做的话可以用 socket.io 、websocket 来做。
sfree2005
2017-07-10 20:33:05 +08:00
你可以看下这个

https://laracasts.com/series/real-time-laravel-with-socket-io

关键字:redis,socket.io

结合楼上说的和链接里的 就是完整的解决方案了。
fuxkcsdn
2017-07-10 20:39:24 +08:00
上代理😳
chinafeng
2017-07-10 20:55:12 +08:00
队列+代理池
mingyun
2017-07-10 23:30:07 +08:00
查询时给个状态,处理中,处理完成,队列处理完就是完成状态了,可以将数据返回了
实时的话用 socket 了
flyingghost
2017-07-11 12:13:26 +08:00
你面临的是两个问题:
1,client 访问速度和 server 查询速度的冲突。异步或者缓存可破。
2,异步查到结果后如何告知的问题。轮询或者 socket 主动推可破。

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

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

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

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

© 2021 V2EX