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

标签 javascript php node.js cookies websocket

我有

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

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

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

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

最佳答案

将我的评论变成答案...

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

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

您还没有说您的应用程序是否希望所有选项卡中的状态相同,或者每个选项卡是否具有不同的状态,并且您会根据需要在服务器端处理一些不同的事情。如果您希望所有选项卡都接收相同的数据,那么每当您想要向客户端发送数据时,您都必须找到与给定用户关联的所有 websockets 并将相同的数据发送给它们。

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

与此处关于 SO 的几乎所有问题一样,如果您告诉我们更多关于您实际在做什么而不是进行理论上的对话,则更容易更具体地回答。例如,如果我们知道您的应用应该如何与不同的选项卡一起工作,那么我们就会知道要遵循哪条行为路径。

关于javascript - websockets如何处理同一浏览器的两个选项卡,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/23300615/

相关文章:

php - Atlassian Confluence 基本登录 API 不工作 : Page Not Found

php - 如何正确获取每个参与者的名字、姓氏和自定义问题的答案,以便在数据库中引入所有信息?

javascript - 避免发件人也收到 firestore 通知

ruby-on-rails - 在 PPC linux (lubuntu 12.04) 上安装 Rails

javascript - 检测对背景大小 : cover 的支持

javascript - 查找并更改值为未定义的属性

javascript - 在 JavaScript 中使用 Click addEventListener 交换 CSS

php - Drupal 7 : Custom 'Node Submit' Page through Views?

javascript - 如何使用每个函数 jQuery 在其父元素上添加类

node.js - 将环境变量传递给特定于部署的 travis