|
UniSet 2.44.4
|
UWebSocketGate это сервис, который позволяет подключаться через websocket и получать события об изменнии датчиков, а так же изменять состояние (см. Команды).
Подключение к websocket-у доступно по адресу:
Помимо этого UWebSocketGate работает в режиме мониторинга изменений датчиков. Для этого достаточно зайти на страничку по адресу:
Для конфигурования необходимо создать секцию вида:
Количество создаваемых websocket-ов можно ограничить при помощи параметра maxWebsockets (–prefix-max-conn).
Вся релизация построена на "однопоточном" eventloop. Если датчики долго не меняются, то периодически посылается "ping" сообщение.
UWebSocketGate поднимает собственный HTTP сервер и поддерживает стандартный набор эндпоинтов uniset HTTP API:
GET /api/v2/list - список доступных объектов (в ответе один элемент: ObjectName).GET /api/v2/<ObjectName>/help - описание API объекта.GET /api/v2/<ObjectName>/status - состояние объекта и список websocket-сессий.GET /api/v2/<ObjectName>/list - короткий список (аналог /list для объекта).В ответах /api/v2/<ObjectName>/... рядом с objectType возвращается extensionType: "UWebSocketGate". В status также присутствует информация о LogServer (logserver).
Пример ответа /api/v2/<ObjectName>/status:
Пример ответа /api/v2/<ObjectName>/list:
Пример ответа /api/v2/list:
Пример ответа /api/v2/<ObjectName>/help:
Основные параметры командной строки (префикс по умолчанию --ws-):
--ws-host ip - IP, на котором слушает HTTP сервер. По умолчанию: localhost.--ws-port num - порт, на котором принимать запросы. По умолчанию: 8081.--ws-max-queued num - размер очереди запросов к HTTP серверу. По умолчанию: 100.--ws-max-threads num - разрешённое количество потоков для HTTP сервера. По умолчанию: 3.--ws-cors-allow addr - CORS заголовок Access-Control-Allow-Origin. По умолчанию: *.Основные параметры командной строки (префикс по умолчанию --ws-):
--ws-max-conn num - максимальное количество одновременных подключений. По умолчанию: 50.--ws-heartbeat-time msec - период сердцебиения. По умолчанию: 3000 мсек.--ws-send-time msec - период посылки сообщений. По умолчанию: 200 мсек.--ws-max-send num - максимум сообщений за одну посылку. По умолчанию: 5000.--ws-max-cmd num - максимум команд за один цикл обработки. По умолчанию: 200.--ws-pong-timeout msec - таймаут ожидания pong. По умолчанию: 5000 мсек.--ws-max-lifetime msec - максимальное время жизни соединения. 0 = без ограничений.Подключение:
Примеры команд (строка, отправляется в сокет):
Ping:
Ошибка (например, слишком длинная команда):
Короткий ответ (get):
Уведомление об изменении (sensorInfo):
Пример подтверждения установки (set/freeze):
Пример ошибки по конкретному датчику:
Пример ответа на unfreeze:
Пример ответа на del (успешное удаление подписки):
Пример ошибки для ask:
После команды ask: сервер начинает присылать SensorInfo при изменениях датчика. Команда del: прекращает отправку уведомлений для указанных датчиков.
Общий формат сообщений:
Example:
Функция get возвращает результат в укороченном формате:
Для того, чтобы соединение не закрывалось при отсутствии данных, каждые ping_sec посылается специальное сообщение:
По умолчанию каждый 3 секунды, но время можно задавать параметром "wsHeartbeatTime" (msec) или аргументом командной строки:
Через websocket можно посылать команды. На текущий момент формат команды строковый. Т.е. для подачи команды, необходимо послать просто строку. Поддерживаются следующие команды:
Если длина команды превышает допустимое значение, то возвращается ошибка:
Под хранение сообщений для отправки выделяется Kbuf*maxSend. Kbuf в текущей реализации равен 10. Т.е. если настроено maxSend=5000 сообщений, то буфер сможет максимально хранить 50000 сообщений.