2013-12-08 1 views
0

Я использую Node.js, и он хорошо работает только с одним окном или вкладкой. Но я хочу получить возвращенные данные из Node.js во всех открытых вкладках браузера пользователя.Node.js и отправить данные на все вкладки браузера

нравится facebook Like, который уведомляет обо всех ваших открытых вкладках.

Это мой регулярный код непосредственно излучающих:

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

но data доступен только на первой открытой вкладке. Как я могу получить его на всех моих открытых вкладках?

+1

Я не понимаю, что вы имеете в виду. Не могли бы вы уточнить? – Markasoftware

+1

Вам нужен массив сокетов. – SLaks

+0

нравится facebook 'Like', который уведомляет обо всех ваших открытых вкладках. – Pars

ответ

1

Предполагая, что вы используете Socket.io и users это объект, который вы добавляете к user_id на новые связи, что, вероятно, происходит то, что каждое новое соединение сокета с тем же user_id будет перезаписывать ранее кэшированные сокет. Это связано с тем, что ключи объектов должны быть уникальными, в противном случае установка одного и того же ключа объекта по существу становится обновлением или переписыванием этого значения.

Возможно, вас заинтересует rooms. В качестве альтернативы, одно потенциальное решение превращает значение объекта для пользователя в массив, который вы нажимаете на новые соединения и соединяете с разъединениями. Когда вы хотите отправить сообщение, вы будете перебирать массив пользователя и соответственно испускать каждый сокет в массиве.

+0

хорошо, используя массив или комнаты, в то время как количество одновременных подключений увеличивается до 10 000 пользователей, и каждый имеет массив. это не повлияло бы на производительность? – Pars

+0

Несомненно, но такая шкала будет влиять на производительность независимо от ее реализации. Я не знаю, какой подход может быть наиболее эффективным. –

Смежные вопросы