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

时间:2015-05-22 12:36:46

标签: node.js express socket.io sails.js

想象一下这种情况:

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

然后,客户端打开另一个浏览器选项卡(不关闭第一个选项卡)并导航到page-y。他连接了一个新的套接字ID。当客户端在此页面上时,我开始发出不同的数据。让我们称之为socket-context-y。

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

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

我无法使用会话ID,因为两个标签的会话ID都相同。我无法使用套接字ID,因为在服务器重新启动后以及客户端自动重新连接时,将给出新的套接字ID。

1 个答案:

答案 0 :(得分:1)

我通过在浏览器重新连接connect时在服务器上的socket.emit("tellMeYourContext", null)回调上发出事件来解决此问题。然后,听取此事件的客户通过执行socket.emit("resumeContext", contextObj)向我发送他们所处的上下文。然后,我知道每个客户端及其选项卡的上下文,并可以相应地恢复喷出。

感谢@laggingreflex的灵感。