Как создать функцию уведомления в режиме реального времени, например, facebook?
Я собираюсь создать функцию уведомления в режиме реального времени для моего веб-приложения (маленькой социальной сети), и я не знаю, с чего начать.
Это то, что я хочу построить: есть такие кнопки, формы комментариев,... Пользователи нажимают так, пишут свои комментарии и (относительно) немедленно, в браузере владельца отображается количество новых комментариев и комментариев. Что-то вроде этого.
Я читал о socketIo на nodeJs, MeteorJS, но, к сожалению, им нужен WebSocket, поддерживаемый mordern браузерами. Я только что прочитал о технике Comet и считаю ее довольно простой в применении. Но я не уверен, что он будет хорошо работать, потому что Comet полагается на длительное соединение (исправьте меня, если я ошибаюсь).
Кроме того, я думаю, что facebook использует Comet для функции push-уведомления. Через консольную вкладку в плагине firebug я всегда вижу соединение с Facebook.
Так может ли кто-нибудь показать мне технику, модель для разработки такой функции?
Ответы
Ответ 1
Перспективной идеей является работа с API-интерфейсом уведомления HTML5; это идеально, если вы хотите, чтобы уведомления отображались на экране пользователя, пока его браузер работает (даже если вы занимаетесь серфингом на другом веб-сайте или все окна закрыты).
http://www.paulund.co.uk/html5-notifications
Однако, если вы хотите обновить разные части своей страницы асинхронно (без обновления или нажатия кнопки), вы должны использовать вместе:
- Ajax calls;
- Слушатели и наблюдатели.
Когда вы вызываете Ajax для получения определенных типов json-данных (например), он может инициировать появление значка (слушателя) с рядом новых уведомлений или так...
С установленным JQuery вы должны быть в порядке...
Несмотря на то, что часто это не так, иногда для простых настроек, проще закодировать работу...
Вы можете начать здесь:
Как реализовать "наблюдателя" в JQuery без плагинов? (он старый, но интересный)
Или на этой странице:
мгновенные обновления браузера с помощью ajax/jquery
(невероятно, как часто запросы google возвращают страницы stacko)
Ответ 2
Вы должны проверить MQTT. Он в основном работает над моделью "Публикация-Подписка" и очень прост в использовании. Этот протокол имеет небольшую площадь и потребляет меньше полосы пропускания. Facebook Messenger также использует MQTT.
Ответ 3
вы можете использовать вызов ajax, входящий в (например) PHP скрипт на сервер, который держит соединение открытым и только отвечает, если и когда что-то должно отображаться пользователю. если ничего не произойдет в течение определенного времени, соединение закрывается, и клиент запускает новый вызов ajax.
обратите внимание, что это касается только взаимодействия между клиентом и сервером, вам все равно нужен метод уведомления внутри сервера, чтобы разбудить php script, если вы хотите избежать постоянного опроса базы данных script, но есть довольно много от soultuions до этого, и они зависят от того, какой язык вы используете на сервере.
Ответ 4
У меня есть идея, это просто, но это может сработать. Почему бы вам не скрыть панель уведомлений как тег Div и создать его с помощью css, чтобы он выглядел как панель уведомлений. Затем всякий раз, когда кому-либо нравится или комментирует страницу, напишите функцию php или js и подключите ее к кнопке отправки комментариев или комментариев, которая покажет владельцам страниц невидимый div на видимый. И я верю, что в зависимости от того, что вы используете, я бы предпочел php session() определить, является ли владелец страницы в сети и может получать уведомления. кроме того, если вам нужно отслеживать статистику страницы, вы можете создать небольшую базу данных, содержащую идентификатор страницы и комментарии пользователей. Вы можете использовать эту базу данных для нажатия нескольких уведомлений на скрытое Div. вы можете использовать JQuery, чтобы заставить его двигаться, как Facebook, если хотите. Я не уверен на 100%, если это самый оптимизированный способ сделать это, но это возможно. Кстати, я просмотрел некоторых, чтобы посмотреть, что люди используют для этого. удивительно, что я тоже не мог найти что-то.