Для создания чата с бекендом на php лучше всего использовать comet сервер, например этот https://comet-server.com/ , он использует SQL запросы из бекенда для обмена данными с comet сервером.
Тут схема работы выглядит так, человек авторизуется на сайте (в бекенде) и тут же логинится на comet сервере командой:
В бекенде
1 |
INSERT INTO users_auth (id, hash) VALUES (" . $this->_user->getId() . ", '" . $this->_hash . "') |
Тут
$this->_user->getId() — ID пользователя в бекенде, $this->_hash — генерим уникальный хеш для каждого пользователя чтобы инициализировать при помощи него подключение на клиентской стороне.
На фронтенде
Подключаем js файлы comet сервера и:
1 2 3 |
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=… выводим его.
1 |
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 юзера в бекенде.
В результате подключились.. и можем принимать сообщения. Отправить этому пользователю сообщение может другой такой-же авторизованный пользователь при помощи команды:
1 |
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 .