Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/javascript/451.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Javascript 如何将socket.io中返回的客户端(网页)重新连接到以前启动的后端进程_Javascript_Node.js_Asynchronous_Socket.io - Fatal编程技术网

Javascript 如何将socket.io中返回的客户端(网页)重新连接到以前启动的后端进程

Javascript 如何将socket.io中返回的客户端(网页)重新连接到以前启动的后端进程,javascript,node.js,asynchronous,socket.io,Javascript,Node.js,Asynchronous,Socket.io,下面是我试图解决的用例:用户向长时间运行的服务器进程提交表单。该进程使用socket.io向浏览器报告长时间运行进程的当前状态(步骤1…步骤2…步骤3…) 现在,用户关闭浏览器,离开,2分钟后返回。长时间运行的进程仍在后台工作,但现在client socket.io连接认为新会话已经开始 当然,我可以在后端检测到这种情况,我只是结束请求并告诉用户稍后再来(糟糕的解决方案),但如果旧的长时间运行的进程仍在运行,或者即使我考虑的方式正确,我还是希望用它重新建立socket.io连接。但是我必须能够支

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

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


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

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


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

,我以一种方式让它工作:当检测到这种情况时,我将会话转换为长时间运行的进程所保持的数据库状态的侦听器,并像模拟主进程一样发出消息。你说的转换为侦听器是什么意思?我也在寻找解决办法。你能再分享一点吗?:)在服务器端存储socket.id,在客户端存储cookie怎么样。这也能解决问题吗?我认为这比我的解决方案要优雅得多,我会尝试一下。我正在尝试使用redis存储将会话保存在服务器端,使用jStorage将会话保存在浏览器端=D