О! Благодарствую, вы настолько в тему!
Как раз сегодня стала задача организовать коммуникацию между вкладками, как раз в эти минуты прикручивал веб-сокеты, а тут на тебе! :)
Подёргал регулятор громкости, перестало работать как следует — музыка играла на обоих вкладках. Потом открыл четыре вкладки — даже без дёрганья регулятора играло на всех четырёх одновременно.
А как отслеживать изменение кук в реальном времени без дополнительных запросов к серверу? Я лично на вскидку не могу дать ответ, а Local Storage выполняет это без каких-либо проблем.
да и я думал что через веб-сокеты. Когда-то искал метод копирования неких локальных данных между вкладками, так вот тут как раз local storage и помог. (записываем в одной вкладке в local storage — json, а во второй проверяем нет ли что то в буфере)
Омг, так вот как они сделали.
А я знаете, как написал у себя — каждая страница имеет соединение по вебсокету, и при новом событии на сервере все эти соединения там перебираются, и выбираются по одному для каждого пользователя, и уже в выбранные соединения шлются сообщения.
Реализуем подобную схему, но только с шаред воркерами для разгрузки сервера, поэтому интересны некоторые вопросы:
Каким сервером для сокетов пользуетесь и не разрывает ли его от постоянных реконектов? А так же не используете ли вместе с ними шаред воркерами?
Сервер — node.js + socket.io.
Библиотеке этой не особо доверяю, потому что не доверяю вообще любым новым фреймворкам, и не смотрел её исходный код.
При разрыве соединения сама реконнектится.
Когда реконнектит — второй раз происходит событие 'connect'. Если это засекается — нужно вручную тянуть с сервера «пропущенные сообщения».
Реконнекты происходят только при перезагрузке сервера. Если не перезагружать — всё вроде как стабильно.
Воркеры появились в HTML5 API, они мол позволяют какой-то конкретный скрипт выполнять фоном, с возможностью обмена сообщениями между друг другом (для синхронизации) и основным скриптом. Такая вот аналогия с обычными потоками.
Ну для сайта с контентом, обновление которого требует перезагрузки страницы нагрузка будет ненужной. Каждый переход по ссылке будет сопровождаться реконнектом. Так же, каждый таб и окно будут иметь по своему коннекту, поэтому мы грузим шаред воркер, который открывает одно соединение в фоне и все вкладки подключаются к нему как к посреднику. Получается одно постоянное подключение, которое на зависит от переходов.
Почитал про эти shared worker'ы.
В целом кое-как понял, как они работают, но не нашёл, есть ли способ «заинклудить» что-нибудь в код worker'а.
Скажем, нужно мне какую-нибудь библиотеку вызывать при создании worker'а — для этого, как я понял, нужно засунуть этот вызов в файл worker'а.
И вот есть ли какая-нибудь директива «include», чтобы подцепить мою стороннюю библиотеку и использовать её код в этом worker'е?
Да, importScripts() называется. Единственное но — в шаред воркерах можно использовать только нативные вебсокеты, так что не получится использовать деградацию до флеша. А это, по сути, ознает то, что такая связка будет работать только в хроме. В опере вебсокеты отключены по умолчанию, а ФФ не поддерживает воркеры вовсе.
Если поменяли на localStorage, то мб. у postMessage есть какой-то недостаток.
Или не поменяли, а до сих пор используют postMessage.
Я сам не смотрел их исходники.
Система уведомлений о событиях на сайте (на примере аудиоплеера ВКонтакте)