- PVSM.RU - https://www.pvsm.ru -
Это не про настоящих лапландцев (с одной 'п'). Это про сервер приложений для микросервисов LAppS.
Если интересно то прошу под кат.
С момента моей первой публикации на тему LAppS [1] прошло всего 6 дней. За эти 6 дней LAppS обновился до версии 0.6.2 и обзавёлся несколькими полезными функциями.
Появилась возможность исполнения сервисов независящих от очереди поступающих сообщений WebSockets. Я пока не совсем уверен как эти сервисы называть:
Standalone, Decoupled, Internal? Основной смысл этих сервисов в том, что они являются "ведущими", т.е. они определяют flow приложения. Они самостоятельно устанавливают правила взаимодействия с внешним миром. Сервисы в LAppS и раньше не блокировали ввод-вывод IOWorker-ов, но существовал только один род сервисов, — подчинённых очереди сообщений WebSockets.
Как пример, хочу предложить выполнение кода HTTP сервера под управлением LAppS в подобном сервисе. Для этого будет использован HTTP сервер Xavante [2] проекта Kepler [3] (см. ниже).
Для конфигурации IOWorker-ов доступны две новые опции
Для приложений (сервисов) доступна опция ограничения максимальной длинны входящего сообщения (по умолчанию 2^64 или лимит доступной памяти).
Предупреждение: сервер xavante это HTTP 1.1 сервер без поддержки SSL (т.е. требует SSL фронтенда в виде nginx или H2O, для балансировки и шифрования трафика). Здесь настройка фронтендов не рассматривается.
Код скопирован из руководства xavante, и вставлен в код сервиса LAppS
local xavante = require "xavante"
local hfile = require "xavante.filehandler"
local hredir = require "xavante.redirecthandler"
http = {}
http.__index = http
http["init"]=function()
webDir = "/tmp/test/";
end
http["mustStop"]=function()
return must_stop()
end
http["run"]=function()
local simplerules = {
{ -- URI remapping example
match = "^[^%./]*/$",
with = hredir,
params = {"index.html"}
},
{
match = ".",
with = hfile,
params = {baseDir = webDir}
}
}
xavante.HTTP{
server = {host = "*", port = 80},
defaultHost = {
rules = simplerules
}
}
xavante.start(http.mustStop,1);
end
return http
Т.к. мы указали для xavante корень файловой системы для html файлов lua webDir = "/tmp/test/";
, то в эту директорию нужно поместить index.html
Давайте совместим полезное с приятным, и поместим туда (переименовав) client.html из примеров [7] вместе с библиотекой cbor.js.
Данный клиент пользуется 3-мя сервисами:
Поэтому создадим файл конфигурации для этих 4-х сервисов (включая xavante):
{
"directories": {
"applications": "apps",
"app_conf_dir": "etc",
"tmp": "tmp",
"workdir": "workdir"
},
"services": {
"echo_lapps" : {
"internal" : false,
"request_target" : "/echo_lapps",
"protocol" : "LAppS",
"instances" : 3,
"max_inbound_message_size" : 1024
},
"http": {
"internal": true,
"instances": 1
},
"time_broadcast": {
"internal": true,
"instances": 1
},
"broadcast_blob": {
"internal": true,
"instances": 1
}
}
}
Конфигурацию (lapps.json) необходимо поместить в /opt/lapps/etc/conf/.
Сами демо приложения, должны быть установлены если Вы ставили LAppS из deb пакета. Если устанавливали из исходников, то просто введите команду маке install-examples.
После этого запускаем "лапландцев": /opt/lapps/bin/lapps
Для запуска в режиме демона можно добавить опцию -d.
Теперь если в браузере запустить http://localhost [9] (если установка шла на localhost) то можно увидеть работу приложения (как на КПДВ): скользящий bar-график echo-rps, нотификация времени, и если открыть инспектор, — то выведенный в консоль блоб.
В коде сервиса http.lua, можно заметить обращение к глобальной функции must_stop(). Эта функция возвращает true, если LAppS желает остановить приложение. Данная функция инжектится во все decoupled-сервисы перед их инициализацией.
Decoupled-сервисы имеют упрощённый интерфейс. Это всё теже модули Lua, однако в них должно быть декларировано всего два метода: init() и run(). Как очевидно из их названий, — первый из них служит для кода инициализации, второй для выполнения сервиса.
У меня в планах:
Также мне нужна помощь в развитии LAppS. Самая простая. Нужны те кто заинтересован в его тестировании, и нужны запросы на функционал.
Планов в принципе много [10], но возможно кому-то будет полезно что-то ещё, чего я просто не вижу.
Автор: Pavel Kraynyukhov
Источник [11]
Сайт-источник PVSM.RU: https://www.pvsm.ru
Путь до страницы источника: https://www.pvsm.ru/web-razrabotka/279846
Ссылки в тексте:
[1] LAppS: https://habr.com/post/354882/
[2] Xavante: https://keplerproject.github.io/xavante/manual.html
[3] Kepler: http://www.keplerproject.org/
[4] wiki: https://github.com/ITpC/LAppS/wiki
[5] deb пакетом: https://github.com/ITpC/LAppS/raw/master/packages/lapps-0.6.2-amd64.deb
[6] Docker: https://raw.githubusercontent.com/ITpC/LAppS/master/dockerfiles/Dockerfile.lapps-runenv.0.6.2
[7] примеров: https://github.com/ITpC/LAppS/tree/master/examples/echo_lapps_client
[8] спецификацией: https://github.com/ITpC/LAppS/blob/master/LAppS_Protocol_Specification.md
[9] http://localhost: http://localhost
[10] много: https://github.com/ITpC/LAppS/projects/1
[11] Источник: https://habr.com/post/358202/?utm_source=habrahabr&utm_medium=rss&utm_campaign=358202
Нажмите здесь для печати.