Использование comet сервера для реализации простого чата

сегодня в 09:58

Comet — любая модель работы веб-приложения, при которой постоянное HTTP-соединение позволяет веб-серверу отправлять (push) данные браузеру без дополнительного запроса со стороны браузера.

На схеме изображено место комет сервера в процессе работы.

На схеме изображено место комет сервера в процессе работы.

Взаимодействие с комет сервером построено следующим образом.
  1. Браузер открывает страницу сайта
  2. После загрузки страницы JavaScript устанавливает постоянное соединение с comet сервером.
  3. Пока открыта страница ваш сервер может отправить произвольное сообщение клиенту. Для этого он обращается с помощью Api к комет серверу и передаёт ему сообщение.
  4. Комет сервер используя открытое соединение с браузером доставляет полученное сообщение в браузер.
  5. JavaScript Api полученное от сервера сообщение предаёт в ваш collback

Существует не мало подходов для реализации, но актуальным на данный момент является WebSockets, в использовании остальных подходов таких как Polling, Long polling, «бесконечный» iframe и Flash сокеты уже почти необходимости так как вебсокеты уже поддерживаются всем современными браузерами.
Будет хорошо если кто то ещё поделится ссылками на похожие проекты.
Название Лицензия API
Centrifuge MIT Python, Ruby, Java, PHP
Nginx Push Stream Module GPL REST API
dklab_realplexor GPL PHP
comet-server.ru Как сервис,
С установкой на свои сервера
Delphi, C, C++, Эйфель, Java, Лисп, Perl,
PHP, Python, Ruby, Smalltalk, Node.js,
Bash, Компонентный Паскаль и Tcl
(Все языки для которых есть MySQL клиент)
fanout.io Как сервис,
С установкой на свои сервера
Python, Ruby, PHP, Node, Go, Django
pusher.com Как сервис REST API и библиотеки для Ruby, PHP, .NET,
Node.js, Python
hydna.com Как сервис C++, Erlang, Go (Push only), Java, JavaScript,
Julia (Push only), Lua (Push only), .NET, Node.js,
Objective-C, PHP (Push only), Python (Push only),
Ruby (Push only)
tambur.io Как сервис Ruby, Python, PHP, Java, Erlang
Есть ещё сводная таблица реализаций комет серверов, но она датирована аж 2009 годом
Разберём пример построения чата. В качестве комет сервера будем использовать comet-server.ru
1643cdf848544901913bd1c3a9af9b3a.png

Чат будет работать следующим образом:
  • Пользователь заходит на страницу и сразу подписывается с помощью JavaScript Api на канал для получения сообщений чата.
  • Для того что бы отправить сообщение пользователь отправляет текст сообщения через ajax на php сервер.
  • PHP сервер полученное сообщение обрабатывает, по желанию сохраняет к себе в БД и делает с ним что угодно.
  • Затем php сервер соединяется с комет сервером и передаёт ему запрос на отправку сообщения в канал.
  • Комет сервер полученное от php сервера сообщение рассылает всем кто подписан на канал.

Код для получения сообщений из чата



    
    
    





Для связи с комет сервером используется CometQL. CometQL - это api для работы с комет сервером по протоколу MySQL.


Код для отправки сообщения из php



Демо работы чата здесь.
Тут ещё один пример чата, но в нём php сервер вообще не используется, всю работу выполняет comet сервер. А здесь пример чата с авторизацией на комет сервере.

Автор: @Levhav
6f5cd5d57a998ffccfa6e44918567d05.png

SaaS comet сервис

Только зарегистрированные пользователи могут оставлять комментарии. Войдите, пожалуйста.

© Habrahabr.ru