如何在服务器重启时区分和恢复来自同一用户的两个不同的客户端套接字连接?
How do I distinguish between and restore two different client socket connections from same user on server restart?
想象一下这个场景:
客户端打开浏览器选项卡并导航至第 x 页。当客户端在此页面上时,我通过与此页面相关的套接字发出一些数据。我们称这个为 socket-context-x.
然后,客户端打开另一个浏览器选项卡(不关闭第一个选项卡)并导航到第 y 页。他连接了一个新的套接字 ID。当客户端在此页面上时,我开始发出不同的数据。我们称其为 socket-context-y。
现在,假设服务器重新启动并且客户端的选项卡自动重新连接到服务器。现在,我必须记住每个具有套接字连接的选项卡的上下文,以便我可以继续向每个页面发送相关数据。
我如何区分每个选项卡所在的套接字上下文?
我不能使用会话 ID,因为两个选项卡的会话 ID 相同。我不能使用套接字 ID,因为在服务器重新启动后和客户端自动重新连接时,将提供新的套接字 ID。
我通过在浏览器重新连接时在服务器中的 connect
回调上发出事件(例如 socket.emit("tellMeYourContext", null)
)解决了这个问题。然后,收听此事件的客户通过 socket.emit("resumeContext", contextObj)
向我发送他们所处的上下文。然后,我知道每个客户端及其选项卡所在的上下文,并可以相应地恢复涌出。
感谢@laggingreflex 的启发。
想象一下这个场景:
客户端打开浏览器选项卡并导航至第 x 页。当客户端在此页面上时,我通过与此页面相关的套接字发出一些数据。我们称这个为 socket-context-x.
然后,客户端打开另一个浏览器选项卡(不关闭第一个选项卡)并导航到第 y 页。他连接了一个新的套接字 ID。当客户端在此页面上时,我开始发出不同的数据。我们称其为 socket-context-y。
现在,假设服务器重新启动并且客户端的选项卡自动重新连接到服务器。现在,我必须记住每个具有套接字连接的选项卡的上下文,以便我可以继续向每个页面发送相关数据。
我如何区分每个选项卡所在的套接字上下文?
我不能使用会话 ID,因为两个选项卡的会话 ID 相同。我不能使用套接字 ID,因为在服务器重新启动后和客户端自动重新连接时,将提供新的套接字 ID。
我通过在浏览器重新连接时在服务器中的 connect
回调上发出事件(例如 socket.emit("tellMeYourContext", null)
)解决了这个问题。然后,收听此事件的客户通过 socket.emit("resumeContext", contextObj)
向我发送他们所处的上下文。然后,我知道每个客户端及其选项卡所在的上下文,并可以相应地恢复涌出。
感谢@laggingreflex 的启发。