【发布时间】:2021-12-28 11:09:15
【问题描述】:
所以我目前正在使用 socket.io 作为加载屏幕,但它无法正常工作,所以我将尝试不同的解决方案。我需要发生以下事情:用户打开我的应用程序——这会触发服务器端的一个功能(CPU 密集型抓取功能大约需要 8 秒)。功能完成后,我需要通知客户端功能已完成并且客户端获取结果(获取此结果后,应用加载屏幕关闭,用户进入应用)。
我目前的实现是使用 socket.io 排放并通过后台线程上的 Redis 队列处理抓取功能。
是否有不同的方法来执行此操作,而不是使用套接字连接并从客户端 -> 服务器发送发射,反之亦然?
我认为我不能只处理经典的 GET 请求,因为在等待响应的同时让长时间运行(8 秒)的请求打开这么长时间不是不好的做法吗?另外,我查看了服务器发送的事件,但我不确定在这种情况下能否使用它。
非常感谢任何见解!
【问题讨论】:
-
FWIW,socket.io 的工作原理是“让长时间运行的请求保持打开状态”。当您的客户端应用程序与 socket.io 连接时,它使用普通的 HTTPS 连接,然后“升级”到 websocket 连接并保持打开状态。所以,如果 socket.io 适合你,那很好。
-
@O.Jones 是的,这就是问题所在...socket.io 以传输关闭和传输错误问题的形式给我带来了不小的痛苦,所以我宁愿只使用不同的实现,如果可能。
-
我使用 SerpAPI 进行抓取,我还使用了一些地理编码 API 函数调用。 Redis 目前在 Node.js 后端用于对抓取请求进行排队,而 Swift 是在前端(客户端)使用的。
标签: javascript node.js swift redis long-running-processes