0

这是我要解决的用例:用户将表单提交到长时间运行的服务器进程。该进程使用 socket.io 向浏览器报告长时间运行进程的当前状态(步骤 1...步骤 2...步骤 3...)。

现在,用户关闭浏览器,离开,2 分钟后回来。长时间运行的进程仍在后台运行,但现在客户端 socket.io 连接知道认为新会话已开始。

我当然可以在后端检测到这种情况,我只是结束该请求并告诉用户稍后再回来(糟糕的解决方案),但我真的很想用旧的长时间运行的进程重新建立 socket.io 连接如果它仍在运行,或者即使我正在以正确的方式考虑这个问题。但我必须能够支持用户断开客户端连接并稍后返回。

4

1 回答 1

1

因此,我以一种方式工作:当检测到这种情况时,我将会话变成长时间运行进程所持久的数据库状态的侦听器,并像模仿主进程一样发出消息。

详细说明:我向数据库添加了一个报告状态字段,用于跟踪每个用户的报告生成进度。当用户登录时,我根据后端数据库检查 user_id 以查看他们的报告是否正在处理中。发生这种情况时,服务器端进入侦听模式,每 5 秒轮询数据库以更新报告状态,并将该状态报告回客户端,直到生成报告,或 5 小时过去(发布进程的硬限制如果出现其他问题)。

于 2013-07-05T06:06:29.137 回答