Скрипты

Большая новость: Viinex 2.0 получил возможность расширения логики за счет пользовательских скриптов.

Идея состоит в том, чтобы встроить прямо в Viinex 2.0 язык JavaScript, который может исполнять пользовательский код для фильтрации или генерации новых событий, обработки внешних HTTP запросов, а также управления другими объектами Viinex.

Мы использовали движок Duktape, который реализует стандарт языка ECMAScript 5. В Viinex 2.0 мы добавили новый тип объекта -- "script", -- представляющий контекст исполнения JavaScript. Каждый экземпляр объекта "script" является изолированным JS-контекстом, так что несколько скриптов, созданные в Viinex 2.0, могут работать параллельно, при этом исполняя один и тот же либо различный исходный код на языке JavaScript.

Исполнение скрипта в Viinex, как правило, инициируется событиями, которые приходят от других объектов. Но кроме обработки событий мы реализовали также возможность вызывать скрипт, используя HTTP API, предоставляемый сервером Viinex 2.0. Таким образом, каждый скрипт может являться также "сервлетом", если это требуется. Иными словами, -- внешнее ПО, например код, исполняемый веб-страницей в клиентском браузере, может вызывать скрипт в Viinex 2.0 напрямую, отправляя ему HTTP запросы, и получать HTTP ответы, сформированные скриптом. Кроме того, скрипт может также "опубликовать" некоторую информацию, которая в дальнейшем может быть отправлена клиентам в ответ на их HTTP запросы без обращения к самому скрипту, -- что важно для производительности: множество клиентов могут параллельно запросить информацию, опубликованную скриптом, и быстро получить ответ, -- а тем временем скрипт может продолжать обрабатывать новые события.

Разумеется, объект "script", поскольку он является контекстом исполнения JavaScript, сохраняет свое состояние между активациями, инициированными последовательными событиями или HTTP запросами. Это означает, что с помощью скриптов может быть реализована сложная логика, учитывающая историю получения событий (а не только одно событие, обрабатываемое в "данный момент"). Скрипт может накапливать информацию, осуществляя "свертку" по потоку входящих событий, и адаптировать свое поведение соответственно. Кроме этого, скрипт может генерировать новые события, которые Viinex 2.0 отправляет в другие объекты, -- в частности, в HTTP сервер (таким образом, события, генерируемые скриптами, можно получать через предусмотренный в Viinex интерфейс WebSocket), либо в экземпляр объекта "внешний процесс", который может представлять точку сопряжения Viinex с произвольной внешней системой.

Что до программных интерфейсов, доступных скриптам для управления другими объектами Viinex 2.0, -- этот JavaScript API совсем новый на текущий момент, и пока не полностью отражает программный интерфейс, доступный через HTTP. Сейчас из скриптов можно управлять следующими объектами Viinex: "recording controller" (скрипт может инициировать и останавливать запись видео в архив), "PTZ control" (скрипт может управлять ONVIF устройством, которое поддерживает PTZ), а также "layout control" (то есть -- скрипт может управлять виртуальной камерой, изменяя раскладку, которая отображается на выходном видеопотоке). Мы будем рады обсудить, какую функциональность, доступную в HTTP API, стоит добавить в JS API в первую очередь, -- дайте нам знать, если у вас есть предпочтения на этот счет.

Подробная информация о поддержке скриптов в Viinex 2.0 доступна в документации. Мы уверены, что скрипты в Viinex 2.0 могут существенно упростить нашим партнерам разработку ПО в ряде сценариев, и надеемся что вы сможете убедиться в этом на своем опыте 😉

Комментариев еще нет.

Leave a Reply

Вы должны войти Авторизованы чтобы оставить комментарий.