Описание прямого взаимодействия с комет сервером по протоколу websockets

Может быть полезно для использования комет сервера в среде где нет javascript интерпритатора

Комет сервер отправляет данные в формате json

Авторизация

Параметры подключения определены в url запроса на подключение. В них важен порядок следования параметров в адресе и регистр. Все параметры обязательны но могут иметь пустое значение.

Пример запроса на подключение:

wss://app.comet-server.ru/ws/sesion=undefined&myid=undefined&devid=15&v=3.31&uuid=Db_YTZOMMQc902yluqo7mLns3RXWFz2t&api=js

Параметры:

  • sesion - токен авторизации для пользователя из таблицы users_auth или jwt токен
  • myid - идентификатор пользователя из таблицы users_auth
  • devid - идентификатор `dev_id` для отделения данных одного аккаунта от другого.
  • v - версия клиента (число с точкой) пока этот параметр игнорируется но возможно когда то он будет использоваться для обратной совместимости
  • uuid - случайным обаразом сгенерированный uuid клиента в апи пока не проработан.

После подключения комет сервер отправит в ответ статус авторизации. От других типов сообщений это сообщение отличается тем что содержит поле authorized

{
                {"data": "токен авторизации"},
                {"pipe": "sys"},
                {"event": "serverInfo"},
                {"server": MYSQL_SERVERNAME},
                {"authorized": true}
}

Сообщения приходящие от комет сервера

При наступлении события комет сервер отправляет сообщение в формате json, до версии 4.0 некоторые сообщения в json могут быть закодированы в base64.

Каждое сообщение отделено переносом строки. За раз может прийти несколько сообщений разделённых переносом строки.

Сообщение имеет следующие поля:

  • data - полезная нагрузка отправленая кем то. Строка или json
  • pipe - имя канала (в версии до 4.0 называется pipe_name)
  • event - имя события в канале (в версии до 4.0 называется event_name)
  • error - код ошибки (не всегда есть)

Подписка на события

Для подписки на события надо отправить текстовое сообщение следующего вида

subscription
pipe1
pipe2
pipe3

Ключевое слово subscription потом \n а потом список каналов на которые подписываемся разделённые переносом строки \n

Обратите внимание что подписка осуществляется на канал. Имена событий которые мы ожидаем отправлять не надо.

Ответ на этот запрос не предусмотрен.

Для того чтобы отписаться от некоторых каналов надо отправить заново список каналов на которые мы подписаны за исключением тех на которые мы не подписаны.

Подписываться на канал msg не надо. Личные сообщения доходят всегда если мы авторизованны.

Отправка сообщений в канал

Чтобы отправить сообщение в канал аналогично функции web_pipe_send из JavaScript апи надо отправить сообщение какого вида:

web_pipe2\nPipe_name\nEvent_name\n*\nMessage
  • web_pipe2 - ключевое слово
  • Pipe_name - имя канала
  • Event_name - имя события
  • * - всегда так отправляем так как этот параметр устарел и в дальнейшем не будет поддерживаться
  • Message - само сообщение (можно закодировать его в json)

Получение последних сообщений из канала

Чтобы получить несколько последних сообщений из канала аналогично функции get_pipe_log из JavaScript апи надо отправить сообщение какого вида:

pipe_log\nPipe_name\nMarker\n
  • pipe_log - ключевое слово
  • Pipe_name - имя канала
  • Marker - случайное число из 10 символов. Ответ на этот запрос тоже будет содержать поле marker с этим числом для того чтоб вы могли понять на какой из запросов пишёл ответ.
Поле marker везде себя ведёт так же как и тут. Оно используется чтоб при получении ответа вы знали на что именно пришёл ответ

Получение количества подписчиков в канале

Аналог функции count_users_in_pipe из JavaScript апи

pipe_count\nPipe_name\nMarker\n
  • pipe_count - ключевое слово
  • Pipe_name - имя канала
  • Marker - случайное число из 10 символов.

Обсуждение

Ваш комментарий. Вики-синтаксис разрешён:
W Y I S L