这是一个关于哪种方案是解决服务器端繁重情况但为用户提供响应式 UI 的更智能方法的建议。
设置; 我的系统由两个服务组成(用节点编写);一个前端服务,它监听来自用户的请求和一个后台工作人员,它执行繁重的工作并且不会在 1-2 秒内完成(例如,视频转换、图像大小调整、gzipping、蜘蛛等)。用户通过 WebSockets(和正常的 POST 请求)连接到前端服务。
情景1; 当用户例如。上传视频,前端服务只做一些简单的检查,以用户的名义创建一个工作给后台工作人员处理并直接以状态200响应。稍后工作人员看到它的工作,完成工作并完成工作。然后它会找到用户连接的套接字(如果有的话)并发送“嘿,工作完成”,其中包含与视频转换作业相关的数据(url、长度、比特率等)。
- 我看到的优点:成功上传的快速用户反馈(例如,可以隐藏 ProgressBar)
- 我看到的缺点:用户将得到一个虚假的“成功”响应,没有要处理/显示的数据,并且无论如何都需要等到工作完成。
情景2; 与场景 1 类似,但前端服务不会以状态 200 响应,而是订阅创建的作业“onComplete”事件并让请求悬空,直到触发回调并且数据可以通过管道发送给用户。
- 我看到的优点:“onSuccess”,所有数据都在用户
- 我看到的缺点:根据作业的权重和活动作业数,用户请求可能会超时
在写这个问题时,事情对我来说越来越清楚了(场景 1,但发送了智能成功和更新事件)。无论如何,我想听听您使用的其他场景或对我的场景的进一步利弊!?
谢谢你的协助!
一些不必要的信息;对于 websockets,我使用的是 socket.io,用于创建 kue 和用于 pub/sub redis