написать чат на php

server push — позволяет отправлять сообщения клиенту по инициативе comet сервера то есть push уведомления.

Для доставки оповещений применяется comet технология. Для работы comet оповещений нужен comet сервис. push server, его ещё называют push service, поддерживает постоянно открытое соединение с браузерами клиентов используя технологию websocket или long polling и по команде вашего web сервера может отправить push сообщение любому посетителю.

Использование push service позволит значительно разгрузить ваши сервера и предоставит возможность использования comet технологии уведомлений без усложнения вашей инфраструктуры.

В этой статье рассмотрим как создать простой мини чат на php с использованием комет сервера. Наш realtime php будет работать по технологии websocket. Для связи php с websocket сервером надо использовать php comet api.

Пример как написать чат

Если рассматривать наиболее простой чат для сайта на php то нам понадобится всего один канал. Все пользователи подписываются на события из этого канала, а для отправки события в чат ajax php просто отправляем сообщение в канал.

php chat: Принцип работы.

  1. Все сообщения от всех пользователей отправляются в общий канал web_chat_pipe.
  2. Структура сообщения содержит в себе текст сообщения и имя отправившего это сообщение.
  3. Все принимающие участие в чате подписаны на канал чата. И полученные из него сообщения отображаются в ленте общения.
Примечание: В примерах будет использована библиотека JQuery.

Сначала рассмотрим как работает простой мини чат на php.

Первое что надо отметить это в данном чате люди общаются используя только комет сервер. Это имеет ряд недостатков делающий из чата скорее упрощёную учебную модель.

Слабые стороны:

  1. Нельзя забанить пользователя
  2. Нет регистрации, это позволяет спамить.

Плюсы:

  1. особенно просто в реализации, на самом деле это javascript чат php не используется
  2. очень прост поцес установки чата на сайт

Ну вот ниже по кусочкам рассмотрим как сделать чат на сокетах php:

Функция web_send_msg отправляет сообщение в чат.

function web_send_msg
{
// Получение значений из html элементов ввода.
var text = $"#WebChatTextID".val; // Получаем текст сообщения
var name = $"#WebChatNameID".val; // Получаем имя пользователя

// Очистка поля с текстом сообщения
$"#WebChatTextID".val"";

// Добавление отправленного сообщения в свой список сообщений.
$"#WebChatFormForm".append">p<>b<"+name+": >;

// Отправка сообщения в канал чата.
CometServer.web_pipe_send"web_chat_pipe", {"text":text, "name":name};
}

Здесь можно заметить что строка: $"#WebChatFormForm".appendp>"; добавляет напечатанное сообщение в нашу чат ленту, так чтоб потом было удобно перечитывать сообщения.

А вот вызов CometServer.web_pipe_send"web_chat_pipe", {"text":text, "name":name}; производит непосредственно отправку нашего сообщения всем остальным участникам онлайн чата. Первый аргумент это имя канала в который мы отправим сообщение. Второй параметр это само сообщение.

Примечание: Обратите внимание что имя канала начинается с префикса "web_". Во все каналы имя которых начинается с префикса "web_" сообщение может отправить любой кто знает имя канала прямо из JavaScript. В ряде случаев это может позволить значительно разгрузить ваш собственный сервер.

Этот кусок скрипта назначает функцию обработки на получение отчёта о доставке сообщения.

CometServer.subscription"_answer_to_web_chat_pipe", functionp
{
$"#answer_div".html"Сообщение доставлено "+p.data.number_messages+" получателям. "+p.data.error;
};

Здесь первый аргумент это строка в которой первый символ # а за ним имя канала отчёт о доставки сообщения в который мы ждём. Так то нет необходимости в обработке отчёта о доставке. Из него мы можем получить сколько пользователей получили наше отправленое сообщение и не возникало ли каких либо ошибок. Чиатайте подробнее Использованая литература чат php