Разрабатываю сайты

БЛОГ ПРО WEB

Рассказываю о web-разработке
и помогаю создавать сайты

Как сделать Realtime уведомления на сайте?

CBa-PidUwAAYITh

При необходимости организовать уведомления в реальном времени на сайте или в личном кабинете пользователя, вряд ли будет правильным использовать 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" => "Вася"

);

Вот вроде и всё, что можно было разжевать в данном посте. Удачных реализаций кодом 🙂

 


Добавить комментарий

Ваш адрес email не будет опубликован. Обязательные поля помечены *