websockets如何处理同一浏览器的两个选项卡

时间:2014-04-25 18:38:25

标签: javascript php node.js cookies websocket

我有

  • 1个PHP服务器(提供http请求)和
  • 1 node.js发布更新的数据消息(每个连接都有websockets)。

php服务器设置其cookie。在一个浏览器中,此cookie可在所有选项卡中使用。

当浏览器向域打开2个选项卡时,只有一个cookie标识浏览器,但必须向每个选项卡发送1条更新数据消息。

  1. 区分标签的传统方式是什么?
  2. 我应该使用另一个Cookie(由node.js管理)来区分每个浏览器标签吗?

1 个答案:

答案 0 :(得分:6)

将我的评论转化为答案......

每个标签都有一个单独的websocket。这就是你如何区分不同的标签。如果您在服务器中为每个选项卡保留单独的状态,并且您希望允许同一用户进行多个连接,则必须保持每个websocket连接的状态(您可以使用websocket id),而不是每个用户。

您不需要为每个标签创建单独的Cookie,因为websocket本身已经作为每个标签的唯一ID。

您还没有说过,如果您的应用在所有标签中都需要相同的状态,或者每个标签的状态不同,您可能会根据需要在服务器端处理不同的内容。如果您希望所有选项卡都接收相同的数据,那么每当您想要将数据发送到客户端时,您必须找到与给定用户关联的所有websockets并将相同的数据发送给它们。

如果您希望每个选项卡独立运行,那么您只需保留每个websocket的服务器端状态,并仅将响应发送到响应所属的websocket,而不是与该用户关联的所有websockets。

与SO上的几乎所有问题一样,如果您告诉我们更多关于您实际做的事情而不是进行理论对话,则更容易回答。例如,如果我们知道您的应用应该如何使用不同的标签,那么我们就知道要遵循哪种行为路径。