【问题标题】:Node.js and send back data to all browser tabsNode.js 并将数据发送回所有浏览器选项卡
【发布时间】:2013-12-09 07:18:10
【问题描述】:

我正在使用 Node.js,它只适用于一个窗口或选项卡。但我想在用户浏览器的所有打开选项卡中从 Node.js 获取返回的数据。

就像 facebook Like 在你所有打开的标签中通知。

这是我的常规发射代码:

users[user_id].socket.emit( 'xx', { data } );

data 仅在第一个打开的选项卡中可用。如何在所有打开的标签中获取它?

【问题讨论】:

  • 我不明白你的意思。你能澄清一下吗?
  • 你需要一个套接字数组。
  • like facebook Like 在你所有打开的标签中通知。
  • 所以?如果每个用户可以有多个套接字,你仍然需要一个数组。
  • “彗星”不是一个特定的产品——它是一个通用术语,指的是从服务器->客户端推送数据的各种技术解决方案。例如。你可以做传统的轮询、长轮询、流式 HTTP、WebSockets ......选择你的毒药。使用 Node.js,SocketIO 非常流行。但是,无论您使用什么,您的服务器都需要维护一个所有客户端的列表,这些客户端与您的服务器具有活动的、开放的连接。然后,当您有数据要发送时,您需要将该数据广播到所有连接的客户端。

标签: javascript node.js


【解决方案1】:

假设您正在使用 Socket.io 并且 users 是您在新连接上添加 user_id 的对象,那么可能发生的情况是每个具有相同 user_id 的新套接字连接都会覆盖以前缓存的套接字。这是因为对象键必须是唯一的,否则设置对象的相同键本质上会更新或覆盖该值。

您可能对rooms 感兴趣。或者,一种可能的解决方案是将用户的对象值转换为一个数组,您可以在新连接上推送到该数组,并从断开连接处进行拼接。当您想发送消息时,您将遍历用户的数组并相应地发送到数组中的每个套接字。

【讨论】:

  • 好吧,在使用阵列或房间时,同时连接的数量增加到 10,000 个用户,每个用户都有一个阵列。这不会影响性能吗?
  • 当然,但无论实施如何,这种规模都会影响性能。我不知道哪种方法可能是最好的。
猜你喜欢
  • 2015-03-04
  • 1970-01-01
  • 2013-10-01
  • 1970-01-01
  • 1970-01-01
  • 2012-09-19
  • 2012-01-12
  • 2015-10-22
  • 1970-01-01
相关资源
最近更新 更多