Каков наилучший способ отслеживать живые уведомления для отправки пользователю? - PullRequest
1 голос
/ 28 января 2010

Я использую плагин, похожий на рычание, для того, чтобы jQuery отправлял живые сообщения пользователям, чтобы поделиться активностью на сайте. Сейчас я только обновляю пользователя уведомлениями, которые произошли с момента последнего доступа пользователя к сайту. Однако, когда у меня открыто несколько вкладок на сайте, только некоторые вкладки получают уведомления из-за длинных запросов на опрос, поскольку вкладка может сбрасывать уведомление до того, как другие вкладки получают их.

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

Спасибо.

1 Ответ

0 голосов
/ 10 августа 2012

Вы можете использовать window.localStorage объект в качестве буфера для уведомлений, которые совместно используются вкладками / окнами. Для обеспечения кросс-браузерной совместимости вы также можете использовать библиотеку store.js вместо непосредственного взаимодействия с localStorage.

Таким образом, вы можете отправлять свои уведомления клиенту через веб-сокет или любым другим способом, и обработчик отправит их в этот буфер. Скажем, это будет массив типа

[
    notification1,
    notification2
    // etc.
]

Каждое окно (вкладка) должно быть зарегистрировано в localStorage, когда пользователь открывает его, например:

{
    wnd_<timestamp_of_window1_onload_event>: 1
    wnd_<timestamp_of_window2_onload_event>: 1
}

В каждом окне (вкладке) вы можете использовать функцию window.setInterval для проверки буфера каждые N миллисекунд на наличие новых уведомлений. Функция, вызываемая setInterval, будет читать новые уведомления из буфера и отображать их. В обработчике window.onbeforeunload вы отмените регистрацию текущего окна в коллекции windows в localStorage. И если коллекция окон стала пустой после отмены регистрации текущего окна, вы можете очистить буфер уведомлений. Конечно, это краткое решение, может быть, вам нужно подумать об удалении устаревших (обрабатываемых всеми окнами) уведомлений из буфера до закрытия всех окон.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...