PHPNewbie
V2EX  ›  PHP

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

  •  1
     
  •   PHPNewbie · Jul 10, 2017 · 3857 views
    This topic created in 3407 days ago, the information mentioned may be changed or developed.

    我的情况是这样的:

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

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

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

    请问:

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

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

    8 replies  •  2017-07-11 12:13:26 +08:00
    freehere
    freehere
    Jul 10, 2017
    1
    不合适,加缓存吧,相同的东西多长时间返回相同的信息就好了,具体看你们的业务逻辑了
    ghostheaven
    ghostheaven
    Jul 10, 2017 via Android
    2
    ajax 轮询或者 websocket
    caniuse
    caniuse
    Jul 10, 2017
    3
    用队列是对的,你还需要即时通讯,可以考虑集成环信等免费的即时通讯功能,自己做的话可以用 socket.io 、websocket 来做。
    sfree2005
    sfree2005
    Jul 10, 2017 via Android
    4
    你可以看下这个

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

    关键字:redis,socket.io

    结合楼上说的和链接里的 就是完整的解决方案了。
    fuxkcsdn
    fuxkcsdn
    Jul 10, 2017 via iPhone
    5
    上代理😳
    akafeng
    akafeng
    Jul 10, 2017
    6
    队列+代理池
    mingyun
    mingyun
    Jul 10, 2017
    7
    查询时给个状态,处理中,处理完成,队列处理完就是完成状态了,可以将数据返回了
    实时的话用 socket 了
    flyingghost
    flyingghost
    Jul 11, 2017
    8
    你面临的是两个问题:
    1,client 访问速度和 server 查询速度的冲突。异步或者缓存可破。
    2,异步查到结果后如何告知的问题。轮询或者 socket 主动推可破。
    About   ·   Help   ·   Advertise   ·   Blog   ·   API   ·   FAQ   ·   Privacy   ·   Solana   ·   1628 Online   Highest 6679   ·     Select Language
    创意工作者们的社区
    World is powered by solitude
    VERSION: 3.9.8.5 · 31ms · UTC 10:47 · PVG 18:47 · LAX 02:47 · JFK 05:47
    ♥ Do have faith in what you're doing.