跳至主要內容
  • Hostloc 空間訪問刷分
  • 售賣場
  • 廣告位
  • 賣站?

4563博客

全新的繁體中文 WordPress 網站
  • 首頁
  • PHP 如何实现异步请求实时返回结果?
未分類
21 7 月 2020

PHP 如何实现异步请求实时返回结果?

PHP 如何实现异步请求实时返回结果?

資深大佬 : solaro 5

场景如下:
用户 A ——请求—–> API-1
API-1 ——收到请求后,往队列里丢数据,让队列异步处理——>队列
队列 ——CURL 请求 API-2 —–>返回结果

现在的问题是:用户 A 本次请求希望能实时得到返回结果。那么问题来了:返回结果要怎么实时返回,就算结果返回,也是返回给队列(或者说先存储于 DB 中),那么用户 A 的当前这个没法收到实时数据,或者说直接在代码里 sleep 个 N 秒后再读取 DB ????

大佬有話說 (12)

  • 主 資深大佬 : solaro

    目前用的 laravel
    有没有大佬碰到过这种场景。API-1 和 API-2 网件延迟在 500ms 左右

  • 主 資深大佬 : solaro

    有没有其他方案可以解决的。或者 websocket 内存常驻????

  • 資深大佬 : ooh

    扔队列里面异步处理成功回调通过长连接通知客户端
    还不如 api1 请求成功后,客户端定时查询处理结果,500ms 也转不了几下

  • 資深大佬 : kaiki

    想想扫码登录是怎么处理的呗,隔一段时间请求一下,直到有返回

  • 資深大佬 : KasuganoSoras

    给你个思路:
    客户端 -> WebSocket -> Swoole 服务端,然后 Swoole 再把用户请求转发给 API,并且转发的时候为这个请求打上一个 Tag,例如加个 Header,用于标注是哪一个 WebSocket 客户端发来的请求。API 处理完以后把消息返回给 Swoole,并且记得附带上刚刚请求来的 Tag,然后 Swoole 根据 Tag 寻找对应的 WebSocket 客户端,再把消息推回去。

  • 資深大佬 : jugelizi

    典型的长轮询呀

  • 資深大佬 : rming

    不在乎 rps 的话,把队列改成同步执行

  • 資深大佬 : LinsVert

    前端轮询就行了 同 4L 的扫码登陆;或者就同步执行,laravel 的话 就是 dispatchNow

  • 主 資深大佬 : solaro

    @kaiki 請求沒有結束,而且請求是保持住的,并不是客戶端那種輪詢

  • 主 資深大佬 : solaro

    @rming 同步執行,PHP 的進程一行會 timeout

  • 主 資深大佬 : solaro

    @jugelizi 不是長輪詢吧,可能是長連接?

  • 主 資深大佬 : solaro

    @KasuganoSoras 好像你的方案更靠譜些呢,我試試哈,謝謝

文章導覽

上一篇文章
下一篇文章

AD

其他操作

  • 登入
  • 訂閱網站內容的資訊提供
  • 訂閱留言的資訊提供
  • WordPress.org 台灣繁體中文

51la

4563博客

全新的繁體中文 WordPress 網站
返回頂端
本站採用 WordPress 建置 | 佈景主題採用 GretaThemes 所設計的 Memory
4563博客
  • Hostloc 空間訪問刷分
  • 售賣場
  • 廣告位
  • 賣站?
在這裡新增小工具