This topic created in 2127 days ago, the information mentioned may be changed or developed.
场景如下:
用户 A ------请求-----> API-1
API-1 ------收到请求后,往队列里丢数据,让队列异步处理------>队列
队列 ------CURL 请求 API-2 ----->返回结果
现在的问题是:用户 A 本次请求希望能实时得到返回结果。那么问题来了:返回结果要怎么实时返回,就算结果返回,也是返回给队列(或者说先存储于 DB 中),那么用户 A 的当前这个没法收到实时数据,或者说直接在代码里 sleep 个 N 秒后再读取 DB ????
12 replies 2020-07-27 22:32:56 +08:00  | | 1 solaro Jul 24, 2020 目前用的 laravel 有没有大佬碰到过这种场景。API-1 和 API-2 网件延迟在 500ms 左右 |
 | | 2 solaro Jul 24, 2020 有没有其他方案可以解决的。或者 websocket 内存常驻???? |
 | | 3 ooh Jul 24, 2020 扔队列里面异步处理成功回调通过长连接通知客户端 还不如 api1 请求成功后,客户端定时查询处理结果,500ms 也转不了几下 |
 | | 4 kaiki Jul 24, 2020 1 想想扫码登录是怎么处理的呗,隔一段时间请求一下,直到有返回 |
 | | 5 KasuganoSoras Jul 24, 2020 1 给你个思路: 客户端 -> WebSocket -> Swoole 服务端,然后 Swoole 再把用户请求转发给 API,并且转发的时候为这个请求打上一个 Tag,例如加个 Header,用于标注是哪一个 WebSocket 客户端发来的请求。API 处理完以后把消息返回给 Swoole,并且记得附带上刚刚请求来的 Tag,然后 Swoole 根据 Tag 寻找对应的 WebSocket 客户端,再把消息推回去。 |
 | | 6 jugelizi Jul 24, 2020 via iPhone 典型的长轮询呀 |
 | | 7 rming Jul 24, 2020 via iPhone 不在乎 rps 的话,把队列改成同步执行 |
 | | 8 LinsVert Jul 24, 2020 前端轮询就行了 同 4L 的扫码登陆;或者就同步执行,laravel 的话 就是 dispatchNow |