在服务器重启时,如何区分并恢复来自同一用户的两个不同客户端套接字连接?

想象一下这个场景:

客户端打开浏览器选项卡并导航到page-x。 当客户端在这个页面上时,我通过与此页面相关的套接字发出一些数据。 我们来调用这个socket-context-x。

然后,客户端打开另一个浏览器选项卡(不closures第一个)并导航到页面-y。 他连接一个新的套接字ID。 当客户端在这个页面上时,我开始发送不同的数据。 我们来调用这个socket-context-y。

现在,想象服务器重新启动,客户端的选项卡自动重新连接到服务器。 现在,我必须记住每个具有套接字连接的选项卡的上下文,以便我可以继续向每个页面发送相关数据。

我如何区分每个标签所在的套接字上下文?

我不能使用会话ID,因为会话ID将是相同的两个选项卡。 我不能使用套接字ID,因为服务器重新启动后,当客户端自动重新连接,将给出新的套接字ID。

我通过在浏览器重新连接(如socket.emit("tellMeYourContext", null)时在服务器上发出connectcallback事件来解决此问题。 然后,侦听此事件的客户端通过执行socket.emit("resumeContext", contextObj)向我发送上下文。 然后,我知道每个客户端及其标签所处的环境,并且可以相应地恢复出现。

感谢@laggingreflex的灵感。