Различия

Здесь показаны различия между двумя версиями данной страницы.

Ссылка на это сравнение

Предыдущая версия справа и слева Предыдущая версия
Следующая версия
Предыдущая версия
comet:ws-api [2018/06/01 16:42]
levhav
comet:ws-api [2018/08/14 17:02]
levhav [Описание прямого взаимодействия с комет сервером по протоколу websockets]
Строка 1: Строка 1:
-Описание прямого взаимодействия с комет сервером по вебсокет ​протоколу +====== ​Описание прямого взаимодействия с комет сервером по  протоколу ​websockets ======
  
 Может быть полезно для использования комет сервера в среде где нет javascript интерпритатора Может быть полезно для использования комет сервера в среде где нет javascript интерпритатора
  
 Комет сервер отправляет данные в формате json Комет сервер отправляет данные в формате json
-С версии 4.1 будет принимать тоже большую часть запросов в json формате,​ а пока принимает в текстовом формате. 
  
- +====== Авторизация ​======
-=== Авторизация ===+
  
 Параметры подключения определены в url запроса на подключение. Параметры подключения определены в url запроса на подключение.
-В них важен порядок следования параметров в адресе.+В них важен порядок следования параметров в адресе и регистр. Все параметры обязательны но могут иметь пустое значение. 
  
 Пример запроса на подключение:​ Пример запроса на подключение:​
  
 +<​code>​
 wss://​app.comet-server.ru/​ws/​sesion=undefined&​myid=undefined&​devid=15&​v=3.31&​uuid=Db_YTZOMMQc902yluqo7mLns3RXWFz2t&​api=js wss://​app.comet-server.ru/​ws/​sesion=undefined&​myid=undefined&​devid=15&​v=3.31&​uuid=Db_YTZOMMQc902yluqo7mLns3RXWFz2t&​api=js
 +</​code>​
 +
 +Параметры:​
 +
 +  * sesion - токен авторизации для пользователя из таблицы users_auth или jwt токен
 +  * myid - идентификатор пользователя из таблицы users_auth
 +  * devid - идентификатор `dev_id` для отделения данных одного аккаунта от другого. ​
 +  * v - версия клиента (число с точкой) пока этот параметр игнорируется но возможно когда то он будет использоваться для обратной совместимости
 +  * uuid - случайным обаразом сгенерированный uuid клиента в апи пока не проработан.
 +
 +После подключения комет сервер отправит в ответ статус авторизации. От других типов сообщений это сообщение отличается тем что содержит поле authorized
 +<​code>​
 +{
 +                {"​data":​ "​токен авторизации"​},​
 +                {"​pipe":​ "​sys"​},​
 +                {"​event":​ "​serverInfo"​},​
 +                {"​server":​ MYSQL_SERVERNAME},​
 +                {"​authorized":​ true}
 +}
 +</​code>​
 +
 +====== Сообщения приходящие от комет сервера ======
 +
 +При наступлении события комет сервер отправляет сообщение в формате json, до версии 4.0 некоторые сообщения в json могут быть закодированы в base64.
 +
 +Каждое сообщение отделено переносом строки. За раз может прийти несколько сообщений разделённых переносом строки.
 +
 +Сообщение имеет следующие поля:
 +
 +  * data - полезная нагрузка отправленая кем то. Строка или json
 +  * pipe - имя канала (в версии до 4.0 называется pipe_name)
 +  * event - имя события в канале (в версии до 4.0 называется event_name)
 +  * error - код ошибки (не всегда есть)
 +
 +
 +====== Подписка на события ======
 +
 +Для подписки на события надо отправить текстовое сообщение следующего вида
 +<​code>​
 +subscription
 +pipe1
 +pipe2
 +pipe3
 +</​code>​
 +
 +Ключевое слово subscription потом \n а потом список каналов на которые подписываемся разделённые переносом строки \n
 +
 +Обратите внимание что подписка осуществляется на канал. Имена событий которые мы ожидаем отправлять не надо. ​
 +
 +Ответ на этот запрос не предусмотрен.
 +
 +Для того чтобы отписаться от некоторых каналов надо отправить заново список каналов на которые мы подписаны за исключением тех на которые мы не подписаны.
 +
 +Подписываться на канал msg не надо. Личные сообщения доходят всегда если мы авторизованны.
 +
 +====== Отправка сообщений в канал ======
 +
 +Чтобы отправить сообщение в канал аналогично функции web_pipe_send из JavaScript апи надо отправить сообщение какого вида:
 +
 +<​code>​
 +web_pipe2\nPipe_name\nEvent_name\n*\nMessage
 +</​code>​
 +
 +  * web_pipe2 - ключевое слово
 +  * Pipe_name - имя канала
 +  * Event_name - имя события
 +  * *  - всегда так отправляем так как этот параметр устарел и в дальнейшем не будет поддерживаться
 +  * Message - само сообщение (можно закодировать его в json)
 +
 +====== Получение последних сообщений из канала ====== ​
 +
 +Чтобы получить несколько последних сообщений из канала аналогично функции get_pipe_log из JavaScript апи надо отправить сообщение какого вида:
 +
 +<​code>​
 +pipe_log\nPipe_name\nMarker\n
 +</​code>​
 +
 +  * pipe_log - ключевое слово
 +  * Pipe_name - имя канала
 +  * Marker - случайное число из 10 символов. Ответ на этот запрос тоже будет содержать поле marker с этим числом для того чтоб вы могли понять на какой из запросов пишёл ответ. ​
  
 +<note tip>​Поле marker везде себя ведёт так же как и тут. Оно используется чтоб при получении ответа вы знали на что именно пришёл ответ</​note>​
  
-Параметр+====== ​Получение количества подписчиков в канале ====== ​
  
 +Аналог функции count_users_in_pipe из JavaScript апи ​
  
 +<​code>​
 +pipe_count\nPipe_name\nMarker\n
 +</​code>​
  
 +  * pipe_count - ключевое слово
 +  * Pipe_name - имя канала
 +  * Marker - случайное число из 10 символов.