Для создания чата с бекендом на 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 .
