Как сделать Realtime уведомления на сайте?
При необходимости организовать уведомления в реальном времени на сайте или в личном кабинете пользователя, вряд ли будет правильным использовать Ajax, и запускать каждые 5 секунд функцию для вытаскивания информации о новой заявке или же новом сообщении.
Самый лучший вариант на мой взгляд, использовать так называемый Comet сервер, который дает возможность связывать ваш сайт и сервер с уведомлениями, что позволяет отправлять и получать сообщения в реальном времени здесь и сейчас. С помощью этого реализовывается так же и чат обмена сообщениями.
Конечно можно сделать свой сервер на Node.js с socket.io, но это займет больше времени. Зачем терять время, когда уже есть готовый Comet сервер с нужной документацией.
Реализация отправки Realtime уведомлений
Заходим на сайт сервера http://comet-server.ru/ регистрируемся и получаем публичный ID и Приватный KEY.
Теперь нам понадобятся 1 файл и 3 фрагмента кода:
Файл comet.php (Подключение к API сервера для отправки сообщений)
<?php // API Comet сервера function CometQL($CometQuery){ $Comet_devid = '__ID__'; // id разработчика $Comet_devkey = '__KEY__'; // ключ разработчика ini_set('display_errors','on'); error_reporting(E_ALL); $link = mysqli_connect("app.comet-server.ru", $Comet_devid, $Comet_devkey, "CometQL_v1"); if (mysqli_connect_errno()){ CometQL($CometQuery); exit(); }; $result = mysqli_query ( $link, $CometQuery ); mysqli_close ( $link ); } ?>
Теперь нужна авторизация пользователя, это нужно для того, что бы мы могли отправить уведомление нужному пользователю. Допустим пользователь проходит авторизацию на сайте и при этом мы авторизуем его на Comet сервере следующим фрагментом, где $Comet_uid — это id пользователя, $Comet_ulogin — это логин пользователя и $Comet_devid — это публичный ID разработчика.
include('comet.php'); CometQL("INSERT INTO users_auth (id, hash) VALUES (".$Comet_uid.", '".md5($Comet_ulogin)."');");
Hash — это защита, его мы будем так же использовать для инициализации пользователя на получение уведомлений. Я его шифрую просто из логина, но лучше использовать более сложные варианты. Например так $Comet_ulogin.$Comet_uid.’MyHash’ или еще как-нибудь, но главное чтобы Вы могли тоже самое генерировать на странице инициализации. Поехали дальше…
Теперь, браузер каждого авторизованного пользователя должен сказать серверу, что его ID такой и Hash такой и что он хочет получать уведомления, которые относятся лично его.
Код должен присутствовать на всех страницах личного кабинета или сайта.
<script src="https://ajax.googleapis.com/ajax/libs/jquery/1/jquery.min.js" type="text/javascript"></script>; <script src="http://comet-server.ru/CometServerApi.js"></script> <script> $(function() { CometServer().start({dev_id:<?=$Comet_devid;?>, user_id:"<?=$Comet_uid;?>", user_key:"<?=md5($Comet_ulogin);?>"}); CometServer().subscription("msg", function(msg){ console.log(msg); $("#Resultat").append("<p>"+msg.data.message+"</p>"); }); }); </script>
И выводить в div
<div id="Resultat"></div>
msg.data.message выводит отправленное сообщение. И те же самые параметры, $Comet_uid — это id пользователя и $Comet_ulogin — это логин пользователя.
Теперь мы можем отправлять уведомления.
Разместить код надо при забивании в вашу БД нового сообщения или заявки.
include('comet.php'); $Comet_arr = array("message" => "У Вас новая заявка!"); $Comet_mess = json_encode($Comet_arr); CometQL("INSERT INTO users_messages (id, event, message)VALUES ('".$Comet_uid."', 'event', '".$Comet_mess."');");
И те же самые параметры, $Comet_uid — это id пользователя и $Comet_ulogin — это логин пользователя.
Отправляем через JSON для того, чтобы можно было отправить не один параметр, а несколько.
Например:
$Comet_arr = array( "message" => "У Вас новая заявка!", "name" => "Вася" );
Вот вроде и всё, что можно было разжевать в данном посте. Удачных реализаций кодом 🙂
Добавить комментарий