Чат на PHP c использованием COMET сервера и WebSocket

Для создания чата с бекендом на php лучше всего использовать comet сервер, например этот https://comet-server.com/ , он использует SQL запросы из бекенда для обмена данными с comet сервером.

Тут схема работы выглядит так, человек авторизуется на сайте (в бекенде) и тут же логинится на comet сервере командой:

В бекенде

INSERT INTO users_auth (id, hash) VALUES (" . $this->_user->getId() . ", '" . $this->_hash . "')

Тут

$this->_user->getId() — ID пользователя в бекенде, $this->_hash — генерим уникальный хеш для каждого пользователя чтобы инициализировать при помощи него подключение на клиентской стороне.

На фронтенде

Подключаем js файлы comet сервера и:

cometApi.subscription("msg.event", function (msg) {
   $("#WebChatFormForm").append("<p class='alert-warning'><b>" + msg.data.senderName + " : </b>" + msg.data.message + "</p>");
})

Так мы подписались на получение личных сообщений, при поступлении личного сообщения $(«#WebChatFormForm»).append(«<p class=… выводим его.

cometApi.start({ node: "*.*.*.*:*", user_key: "<?php echo md5($email);?>", user_id: "<?php echo getId();?>" })

Тут мы инициализируем связь с комет сервером при помощи websocket . В данном примере COMET используется на своем сервере, его можно использовать и как облачный SaaS сервис с другими настройками… Подробнее о подключении в документации.

node: — тут IP:ПОРТ ws сервера.

user_key: тут хеш который мы отправляли в бекенде

user_id: тут id юзера в бекенде.

В результате подключились.. и можем принимать сообщения. Отправить этому пользователю сообщение может другой такой-же авторизованный пользователь при помощи команды:

INSERT INTO users_messages (id, event, message)VALUES ('" . $poluchatel_id . "', 'event', '" . $msg . "');

Тут у нас :

$poluchatel_id — ID получателя

event — событие

$msg — сообщение

Отправляем это аяксом и готово, по заявлению разработчика этот сервер может держать очень большое количество клиентов… Я сам делаю сейчас проект один и использую этот подход, пока всем доволен, удобно и функционально… В документации все расписано очень  подробно и с примерами https://comet-server.com/wiki/doku.php/ru .

 

 

Комментировать