Share
Embed
WAMP как основа композитных SOA-приложений и его имплементация на Lua
WAMP расшифровывается как Web Application Messaging Protocol. Это открытый протокол, реализующий два паттерна в рамках одного протокола: RPC и Publish/Subscribe. Как мне кажется, это отличная платформа для сферы Internet of Things, Smart City и вообще бизнес-приложений с большим количеством различных компонентов и сервисов.
Konstantin Burkalev
December 11, 2017
Transcript
204 slides
-
WAMP как основа композитных SOA-приложений и его реализация на Lua
Константин Буркалёв @KSDaemon -
Пара слов о себе… 2 • Системный архитектор • 15+
лет опыта в ИТ • Автор и ведущий подкастов о разработке: SDCast & RadioJS • Активный участник группы разработки самого протокола WAMP • Автор и мейнтейнер нескольких реализаций WAMP, в том числе и на Lua -
План доклада Пример системы с применением WAMP Что такое протокол
WAMP, и как он устроен WAMP как основа SOA-решений Сферы применения WAMP-клиент на Lua WAMP-роутер на Nginx/Lua 3 -
Ванная Комната Задача: Система «Умный дом» 4 Пользователь Датчик температуры
фиксирует превышение температуры -
Ванная Комната Задача: Система «Умный дом» 4 Пользователь Температура в
комнате снижается -
Ванная Комната Задача: Система «Умный дом» 4 Пользователь Влажность в
ванной поднимается -
Ванная Комната Задача: Система «Умный дом» 4 Пользователь Админ Админ
настраивает пороговые значения -
Ванная Комната Задача: Система «Умный дом» 4 Пользователь Админ Админ
производит поиск новых устройств -
Ванная Комната Задача: Система «Умный дом» 4 Пользователь Админ Система
информирует о найденных устройствах -
Ванная Комната Задача: Система «Умный дом» 4 Пользователь Админ Система
информирует о найденных устройствах -
Что такое WAMP • Расшифровывается как «Web Application Messaging Protocol»
• Предназначен для коммуникации между программными компонентами практически в режиме реального времени 5 -
Что такое WAMP • Расшифровывается как «Web Application Messaging Protocol»
• Предназначен для коммуникации между программными компонентами практически в режиме реального времени • Предоставляет два механизма: • Publish/Subscribe (PubSub) • Remote Procedure Calls (RPC) 5 -
Что такое WAMP • Расшифровывается как «Web Application Messaging Protocol»
• Предназначен для коммуникации между программными компонентами практически в режиме реального времени • Предоставляет два механизма: • Publish/Subscribe (PubSub) • Remote Procedure Calls (RPC) • Двунаправленный, упорядоченный 5 -
Что такое WAMP • Расшифровывается как «Web Application Messaging Protocol»
• Предназначен для коммуникации между программными компонентами практически в режиме реального времени • Предоставляет два механизма: • Publish/Subscribe (PubSub) • Remote Procedure Calls (RPC) • Двунаправленный, упорядоченный • Для общения клиентов требуется WAMP-роутер 5 -
Почему WAMP? •Открытая спецификация • Продуманный Publish/Subscribe • Продуманный Remote
Procedure Calls • Роутинг сообщений 6 -
Почему WAMP? •Открытая спецификация • Продуманный Publish/Subscribe • Продуманный Remote
Procedure Calls • Роутинг сообщений • Кроссплатформенность 6 -
Почему WAMP? •Открытая спецификация • Продуманный Publish/Subscribe • Продуманный Remote
Procedure Calls • Роутинг сообщений • Кроссплатформенность • Есть реализации более чем на 15 языках 6 -
Альтернативы WAMP 7 Technology PubSub RPC Routed RPC Web native
Cross Language Open Standard WAMP ✔ ✔ ✔ ✔ ✔ ✔ AJAX - ✔ - ✔ ✔ - AMQP ✔ (✔) - - ✔ ✔ Java JMS ✔ - - - - ✔ JSON-RPC - ✔ - ✔ ✔ ✔ MQTT ✔ - - - ✔ ✔ REST - ✔ - ✔ ✔ - SOAP - ✔ - ✔ ✔ ✔ socket.io ✔ - - ✔ - - XMPP ✔ - - ✔ ✔ ✔ ZMQ ✔ - - - ✔ - -
Архитектура WAMP 10 Клиент. Может предоставлять или потреблять ресурсы, такие
как подписки и RPC. -
Архитектура WAMP 12 Peer, узел. Может быть клиентом или роутером,
должен обладать хотя бы одной ролью. -
Архитектура WAMP 13 Роль. Определяет возможности узла. Есть 4 клиентских
роли и 2 роли роутера. -
Архитектура WAMP 14 Сессия. Необходима для идентификации и авторизации клиентов,
анонса ролей узлов. -
Архитектура WAMP 15 Realm. Домен, namespace, единое пространство в рамках
которого определены ресурсы и происходит роутинг сообщений. -
Архитектура WAMP 16 Транспорт. Можно использовать: WebSockets, Raw TCP, Unix
sockets и даже HTTP Long poll. -
Архитектура WAMP 18 Идентификаторы ресурсов, URI. Необходимы для топиков, процедур
и ошибок. Например: Topic: «sensor.events» RPC: «discover.devices» message -
Основные понятия WAMP • Клиент. Может предоставлять или потреблять ресурсы,
такие как подписки и RPC. • Роутер. Занимается авторизацией и маршрутизацией сообщений между клиентами. • Peer, узел. Может быть клиентом или роутером, должен обладать хотя бы одной ролью. • Роль. Определяет возможности узла. Есть 4 клиентских роли и 2 роли роутера. • Сессия. Необходима для идентификации и авторизации клиентов, анонса ролей узлов. • Realm. Домен, namespace, в рамках которого происходит роутинг сообщений. • Транспорт. Можно использовать: WebSockets, Raw TCP, Unix sockets и даже HTTP Long poll. • Сериализатор. Cообщения сериализуются с помощью JSON/MessagePack/CBOR • Идентификаторы ресурсов, URI. Необходимы для топиков, процедур и ошибок. 19 -
WAMP: Features • Basic profile: базовые возможности RPC и PubSub
• Advanced profile: 20 -
WAMP: Features • Basic profile: базовые возможности RPC и PubSub
• Advanced profile: • Challenge-Response Authentication • Progressive call results, call timeout, call canceling • Publication / call trust levels • Caller / publisher identification • Pattern based registration / subscription • Shared registration, sharded registration / subscription • Event history • Meta API & Procedure / topic reflection 20 -
WAMP: установка сессии 21 HELLO Клиент Роутер Realm [1, "homeapp",
{ "roles": { "publisher": {}, "subscriber": {} } }] -
WAMP: установка сессии 21 HELLO WELCOME Клиент Роутер Realm [2,
9129137332, { "roles": { "broker": {} } }] -
WAMP: установка сессии 21 HELLO WELCOME ABORT Клиент Роутер Realm
[3, {"message": "The realm does not exist."}, "wamp.error.no_such_realm"] -
WAMP: установка сессии 21 HELLO WELCOME GOODBYE (init by client)
ABORT Клиент Роутер Realm [6, {"message": "The host is shutting down now."}, "wamp.error.system_shutdown"] -
WAMP: установка сессии 21 HELLO WELCOME GOODBYE (init by client)
ABORT GOODBYE Клиент Роутер Realm [6, {}, "wamp.error.goodbye_and_out"] -
WAMP: установка сессии 21 HELLO WELCOME GOODBYE (init by client)
ABORT GOODBYE GOODBYE (init by router) Клиент Роутер Realm [6, {}, "wamp.error.close_realm"] -
WAMP: установка сессии 21 HELLO WELCOME GOODBYE (init by client)
ABORT GOODBYE GOODBYE GOODBYE (init by router) Клиент Роутер Realm [6, {}, "wamp.error.goodbye_and_out"] -
WAMP: установка сессии 21 HELLO WELCOME GOODBYE (init by client)
ABORT GOODBYE GOODBYE GOODBYE (init by router) Клиент Роутер Realm -
WAMP: Publish / Subscribe 22 SUBSCRIBE Publisher Broker Subscriber Realm
[32, 713845233, {}, "sensor.events"] -
WAMP: Publish / Subscribe 22 SUBSCRIBE SUBSCRIBED Publisher Broker Subscriber
Realm [33, 713845233, 5512315355] -
WAMP: Publish / Subscribe 22 SUBSCRIBE SUBSCRIBED ERROR Publisher Broker
Subscriber Realm [8, 32, 713845233, {}, "wamp.error.not_authorized"] -
WAMP: Publish / Subscribe 22 SUBSCRIBE SUBSCRIBED ERROR PUBLISH Publisher
Broker Subscriber Realm [16, 239714735, {}, "sensor.events", [], {"sensorId ": 25, "temp": 27}] -
WAMP: Publish / Subscribe 22 SUBSCRIBE SUBSCRIBED ERROR PUBLISH PUBLISHED
Publisher Broker Subscriber Realm [17, 239714735, 4429313566] -
WAMP: Publish / Subscribe 22 SUBSCRIBE SUBSCRIBED ERROR PUBLISH PUBLISHED
ERROR Publisher Broker Subscriber Realm [8, 16, 239714735, {}, "wamp.error.not_authorized"] -
WAMP: Publish / Subscribe 22 SUBSCRIBE SUBSCRIBED ERROR PUBLISH PUBLISHED
ERROR EVENT Publisher Broker Subscriber Realm [36, 5512315355, 4429313566, {}, [], {"sensorId ": 25, "temp": 27}] -
WAMP: Publish / Subscribe 22 SUBSCRIBE SUBSCRIBED UNSUBSCRIBE ERROR PUBLISH
PUBLISHED ERROR EVENT Publisher Broker Subscriber Realm [34, 85346237, 5512315355] -
WAMP: Publish / Subscribe 22 SUBSCRIBE SUBSCRIBED UNSUBSCRIBE UNSUBSCRIBED ERROR
PUBLISH PUBLISHED ERROR EVENT Publisher Broker Subscriber Realm [35, 85346237] -
WAMP: Publish / Subscribe 22 SUBSCRIBE SUBSCRIBED UNSUBSCRIBE UNSUBSCRIBED ERROR
ERROR PUBLISH PUBLISHED ERROR EVENT Publisher Broker Subscriber Realm [8, 34, 85346237, {}, "wamp.error.no_such_subscription"] -
WAMP: Publish / Subscribe 22 SUBSCRIBE SUBSCRIBED UNSUBSCRIBE UNSUBSCRIBED ERROR
ERROR PUBLISH PUBLISHED ERROR EVENT Publisher Broker Subscriber Realm -
WAMP: Remote Procedure Calls 23 Caller Dealer Callee REGISTER Realm
[64, 25349185, {}, "dcs.fan.control"] -
WAMP: Remote Procedure Calls 23 Caller Dealer Callee REGISTER REGISTERED
Realm [65, 25349185, 2103333224] -
WAMP: Remote Procedure Calls 23 Caller Dealer Callee REGISTER REGISTERED
ERROR Realm [8, 64, 25349185, {}, "wamp.error.procedure_already_exists"] -
WAMP: Remote Procedure Calls 23 Caller Dealer Callee REGISTER REGISTERED
ERROR CALL Realm [48, 7814135, {}, "dcs.fan.control", [true]] -
WAMP: Remote Procedure Calls 23 Caller Dealer Callee REGISTER REGISTERED
ERROR CALL INVOCATION Realm [68, 6131533, 9823528, {}, [true]] -
WAMP: Remote Procedure Calls 23 Caller Dealer Callee REGISTER REGISTERED
ERROR CALL INVOCATION YIELD Realm [70, 6131533, {}] -
WAMP: Remote Procedure Calls 23 Caller Dealer Callee REGISTER REGISTERED
ERROR CALL RESULT INVOCATION YIELD Realm [50, 7814135, {}] -
WAMP: Remote Procedure Calls 23 Caller Dealer Callee REGISTER REGISTERED
ERROR CALL RESULT INVOCATION YIELD ERROR Realm [8, 68, 6131533, {}, "homeapp.error.hardware_not_found"] -
WAMP: Remote Procedure Calls 23 Caller Dealer Callee REGISTER REGISTERED
ERROR CALL RESULT INVOCATION YIELD ERROR ERROR Realm [8, 48, 7814135, {}, "homeapp.error.hardware_not_found"] -
WAMP: Remote Procedure Calls 23 Caller Dealer Callee REGISTER REGISTERED
UNREGISTER ERROR CALL RESULT INVOCATION YIELD ERROR ERROR Realm [66, 788923562, 2103333224] -
WAMP: Remote Procedure Calls 23 Caller Dealer Callee REGISTER REGISTERED
UNREGISTER UNREGISTERED ERROR CALL RESULT INVOCATION YIELD ERROR ERROR Realm [67, 788923562] -
WAMP: Remote Procedure Calls 23 Caller Dealer Callee REGISTER REGISTERED
UNREGISTER UNREGISTERED ERROR ERROR CALL RESULT INVOCATION YIELD ERROR ERROR Realm [8, 66, 788923562, {}, "wamp.error.no_such_registration"] -
WAMP: Remote Procedure Calls 23 Caller Dealer Callee REGISTER REGISTERED
UNREGISTER UNREGISTERED ERROR ERROR CALL RESULT INVOCATION YIELD ERROR ERROR Realm -
WAMP как основа SOA-решений Распределённая архитектура Слабая связанность компонентов Простой
и понятный интерфейс взаимодействия 24 -
WAMP как основа SOA-решений Распределённая архитектура Слабая связанность компонентов Простой
и понятный интерфейс взаимодействия Унифицированная маршрутизация 24 -
WAMP как основа SOA-решений Распределённая архитектура Слабая связанность компонентов Простой
и понятный интерфейс взаимодействия Унифицированная маршрутизация Независимость от языка программирования 24 -
WAMP как основа SOA-решений Распределённая архитектура Слабая связанность компонентов Простой
и понятный интерфейс взаимодействия Унифицированная маршрутизация Независимость от языка программирования Переиспользуемость компонентов 24 -
WAMP как основа SOA-решений Распределённая архитектура Слабая связанность компонентов Простой
и понятный интерфейс взаимодействия Унифицированная маршрутизация Независимость от языка программирования Переиспользуемость компонентов WAMP удовлетворяет требованиям SOA 24 -
WAMP в качестве ESB 25 WAMP Router Service Providers Service
Providers Service Providers Service Providers Service Providers Consumers Consumers Consumers Consumers Consumers Вызывают RPC Подписываются на топики Регистрируют RPC Публикуют события Подписываются на топики Публикуют события Сервер Сервер Сервер -
WAMP в гетерогенных системах 26 WAMP Router File uploader (python)
Web Client (js) Backoffice Client (c#) Video processing (c++) Image processing (go) Logger (ruby) External API Gateway Client REST API (nodejs) Mobile Client (swift) Backoffice REST API (Java) DB Mobile Client (java) Realm Realm Realm Сервер Сервер Сервер -
Сферы применения WAMP 27 Распределённые приложения с большим количеством сервисов
Smart homes, Smart cities, Интернет вещей в целом -
Сферы применения WAMP 27 Распределённые приложения с большим количеством сервисов
Smart homes, Smart cities, Интернет вещей в целом Системы с долго выполняющимися процессами -
Сферы применения WAMP 27 Распределённые приложения с большим количеством сервисов
Smart homes, Smart cities, Интернет вещей в целом Системы с долго выполняющимися процессами Лёгкая современная альтернатива XMPP, XMLRPC -
Сферы применения WAMP 27 Распределённые приложения с большим количеством сервисов
Smart homes, Smart cities, Интернет вещей в целом Системы с долго выполняющимися процессами Лёгкая современная альтернатива XMPP, XMLRPC Сетевые игры -
Применение WAMP: реальные проекты • Kadecot API Server. Sony Computer
Science Laboratories 28 -
Применение WAMP: реальные проекты • Kadecot API Server. Sony Computer
Science Laboratories • ParaView. Parallel Data Analysis and Visualization Application, Kitware 28 -
Применение WAMP: реальные проекты • Kadecot API Server. Sony Computer
Science Laboratories • ParaView. Parallel Data Analysis and Visualization Application, Kitware • Record.Evolution. Data-warehouse and Business Intelligence 28 -
Применение WAMP: реальные проекты • Kadecot API Server. Sony Computer
Science Laboratories • ParaView. Parallel Data Analysis and Visualization Application, Kitware • Record.Evolution. Data-warehouse and Business Intelligence • SmartME smart city project. MDS Lab at the University of Messina 28 -
Применение WAMP: реальные проекты • Kadecot API Server. Sony Computer
Science Laboratories • ParaView. Parallel Data Analysis and Visualization Application, Kitware • Record.Evolution. Data-warehouse and Business Intelligence • SmartME smart city project. MDS Lab at the University of Messina • ButterflyDNS. Web UI frontend for BIND DLZ • Подсистема управления серверами Gollard VISION 28 -
Health monitor Nginx Подсистема управления сервером 29 WAMP Router Admin
App (c#) Shaman RPC: set.network RPC: get.network Publish: status.change RPC: get.status RPC: get.time RPC: set.time -
Loowy: WAMP-клиент на Lua 30 • Работает в Lua/Luajit на
базе lua-ev • Поддерживает JSON- и Msgpack-сериализаторы -
Loowy: WAMP-клиент на Lua 30 • Работает в Lua/Luajit на
базе lua-ev • Поддерживает JSON- и Msgpack-сериализаторы • Поддерживает ряд фич из Advanced Profile -
Loowy: WAMP-клиент на Lua 30 • Работает в Lua/Luajit на
базе lua-ev • Поддерживает JSON- и Msgpack-сериализаторы • Поддерживает ряд фич из Advanced Profile • Автоматическое переподключение и переподписка -
Loowy: WAMP-клиент на Lua 30 • Работает в Lua/Luajit на
базе lua-ev • Поддерживает JSON- и Msgpack-сериализаторы • Поддерживает ряд фич из Advanced Profile • Автоматическое переподключение и переподписка • TODO: Raw socket transport • TODO: Meta API • TODO: Challenge-Response Authorization (WAMP-CRA) • TODO: работа на основе сопрограмм (coroutines) -
Loowy: примеры вызовов 31 client = loowy.new("ws://localhost/ws/", { realm =
"gv" }) client:publish('sensor.events', { sensorId = 12, temperature = 27}) client:subscribe('sensor.events', function(event) -- process received event end) client:call('dcs.fan.control', true, { onSuccess = function() -- fan turned on successfully end, onError = function(err) -- error occurred end }) -
Loowy: Стек технологий 32 • Lua 5.1+, Luajit 2.0 •
lua-websockets (который работает через luasocket) • lua-ev • lua-rapidjson • lua-MessagePack (опционально) -
Wiola: WAMP роутер на Lua • Работает на базе Nginx/Lua
module • Использует Redis для runtime storage 33 -
Wiola: WAMP роутер на Lua • Работает на базе Nginx/Lua
module • Использует Redis для runtime storage • Поддерживает JSON- и MessagePack-сериализаторы 33 -
Wiola: WAMP роутер на Lua • Работает на базе Nginx/Lua
module • Использует Redis для runtime storage • Поддерживает JSON- и MessagePack-сериализаторы • Поддерживает ряд фич из Advanced Profile 33 -
Wiola: WAMP роутер на Lua • Работает на базе Nginx/Lua
module • Использует Redis для runtime storage • Поддерживает JSON- и MessagePack-сериализаторы • Поддерживает ряд фич из Advanced Profile • TODO: Raw socket transport • TODO: Meta API • TODO: lua-resty-postgres 33 -
Wiola: стек технологий 34 • Nginx или OpenResty, проще говоря
lua-nginx-module • lua-resty-websocket • lua-resty-redis • Redis Server • lua-rapidjson • lua-resty-hmac (опционально, нужен для WAMP-CRA) • lua-MessagePack (опционально) -
Wiola: конфиг Nginx 35 location /ws/ { set $wiola_socket_timeout 10;
set $wiola_max_payload_len 65535; lua_check_client_abort on; header_filter_by_lua_file /lib/wiola/headers.lua; content_by_lua_file /lib/wiola/handler.lua; } -
Wiola: Особенности. JSON • cJSON • нельзя указать способ сериализации
пустых таблиц • lua-resty-libcjson 37 -
Wiola: Особенности. JSON • cJSON • нельзя указать способ сериализации
пустых таблиц • lua-resty-libcjson • не умеет работать с большими числами (int > 32bit) 37 -
Wiola: Особенности. JSON • cJSON • нельзя указать способ сериализации
пустых таблиц • lua-resty-libcjson • не умеет работать с большими числами (int > 32bit) lua-rapidjson 37 -
Wiola: Особенности. JSON • cJSON • нельзя указать способ сериализации
пустых таблиц • lua-resty-libcjson • не умеет работать с большими числами (int > 32bit) lua-rapidjson • пока новых проблем не нашлось :) 37 -
Wiola: Особенности. Runtime-хранилище 38 • Глобальные переменные в памяти •
Создаются каждый раз на request handler -
Wiola: Особенности. Runtime-хранилище 38 • Глобальные переменные в памяти •
Создаются каждый раз на request handler • проблемы с concurrent requests -
Wiola: Особенности. Runtime-хранилище 38 • Глобальные переменные в памяти •
Создаются каждый раз на request handler • проблемы с concurrent requests • Переменные модуля, загружаемого в init_by_lua -
Wiola: Особенности. Runtime-хранилище 38 • Глобальные переменные в памяти •
Создаются каждый раз на request handler • проблемы с concurrent requests • Переменные модуля, загружаемого в init_by_lua • Читать можно во всех воркерах -
Wiola: Особенности. Runtime-хранилище 38 • Глобальные переменные в памяти •
Создаются каждый раз на request handler • проблемы с concurrent requests • Переменные модуля, загружаемого в init_by_lua • Читать можно во всех воркерах • Но запись, спасибо CoW, создаст свою копию модуля для VM -
Wiola: Особенности. Runtime-хранилище 38 • Глобальные переменные в памяти •
Создаются каждый раз на request handler • проблемы с concurrent requests • Переменные модуля, загружаемого в init_by_lua • Читать можно во всех воркерах • Но запись, спасибо CoW, создаст свою копию модуля для VM • ngx.shared.DICT -
Wiola: Особенности. Runtime-хранилище 38 • Глобальные переменные в памяти •
Создаются каждый раз на request handler • проблемы с concurrent requests • Переменные модуля, загружаемого в init_by_lua • Читать можно во всех воркерах • Но запись, спасибо CoW, создаст свою копию модуля для VM • ngx.shared.DICT • Размер каждого словаря задаётся в конфиге и не может изменяться -
Wiola: Особенности. Runtime-хранилище 38 • Глобальные переменные в памяти •
Создаются каждый раз на request handler • проблемы с concurrent requests • Переменные модуля, загружаемого в init_by_lua • Читать можно во всех воркерах • Но запись, спасибо CoW, создаст свою копию модуля для VM • ngx.shared.DICT • Размер каждого словаря задаётся в конфиге и не может изменяться Внешнее хранилище: Redis, Memcache, PostgreSQL, MySQL и прочие -
Wiola: Особенности. lua_code_cache 39 • lua_code_cache off; • удобно отлаживать
код • каждый require() выполняется заново в каждом запросе -
Wiola: Особенности. lua_code_cache 39 • lua_code_cache off; • удобно отлаживать
код • каждый require() выполняется заново в каждом запросе • даже модули, загруженные в init_by_lua, выполняются заново -
Wiola: Особенности. lua_code_cache 39 • lua_code_cache off; • удобно отлаживать
код • каждый require() выполняется заново в каждом запросе • даже модули, загруженные в init_by_lua, выполняются заново • lua_code_cache on; -
Wiola: Особенности. lua_code_cache 39 • lua_code_cache off; • удобно отлаживать
код • каждый require() выполняется заново в каждом запросе • даже модули, загруженные в init_by_lua, выполняются заново • lua_code_cache on; • для production-окружения -
Wiola: Особенности. lua_code_cache 39 • lua_code_cache off; • удобно отлаживать
код • каждый require() выполняется заново в каждом запросе • даже модули, загруженные в init_by_lua, выполняются заново • lua_code_cache on; • для production-окружения • каждый require() выполняется один раз и кэшируется -
Wiola: Особенности. lua_code_cache 39 • lua_code_cache off; • удобно отлаживать
код • каждый require() выполняется заново в каждом запросе • даже модули, загруженные в init_by_lua, выполняются заново • lua_code_cache on; • для production-окружения • каждый require() выполняется один раз и кэшируется • при любом изменении кода необходимо перегружать nginx -
Wiola: Публикация в luarocks, opm 40 • luarocks: есть одна
часть зависимостей, нет другой: -
Wiola: Публикация в luarocks, opm 40 • luarocks: есть одна
часть зависимостей, нет другой: - lua-resty-websocket -
Wiola: Публикация в luarocks, opm 40 • luarocks: есть одна
часть зависимостей, нет другой: - lua-resty-websocket - lua-resty-redis -
Wiola: Публикация в luarocks, opm 40 • luarocks: есть одна
часть зависимостей, нет другой: - lua-resty-websocket - lua-resty-redis ✓ rapidjson -
Wiola: Публикация в luarocks, opm 40 • luarocks: есть одна
часть зависимостей, нет другой: - lua-resty-websocket - lua-resty-redis ✓ rapidjson ✓ lua-resty-hmac -
Wiola: Публикация в luarocks, opm 40 • luarocks: есть одна
часть зависимостей, нет другой: - lua-resty-websocket - lua-resty-redis ✓ rapidjson ✓ lua-resty-hmac ✓ lua-messagepack -
Wiola: Публикация в luarocks, opm 40 • luarocks: есть одна
часть зависимостей, нет другой: - lua-resty-websocket - lua-resty-redis ✓ rapidjson ✓ lua-resty-hmac ✓ lua-messagepack • opm (OpenResty Package Manager): с точностью до «наоборот»: -
Wiola: Публикация в luarocks, opm 40 • luarocks: есть одна
часть зависимостей, нет другой: - lua-resty-websocket - lua-resty-redis ✓ rapidjson ✓ lua-resty-hmac ✓ lua-messagepack • opm (OpenResty Package Manager): с точностью до «наоборот»: ✓ lua-resty-websocket -
Wiola: Публикация в luarocks, opm 40 • luarocks: есть одна
часть зависимостей, нет другой: - lua-resty-websocket - lua-resty-redis ✓ rapidjson ✓ lua-resty-hmac ✓ lua-messagepack • opm (OpenResty Package Manager): с точностью до «наоборот»: ✓ lua-resty-websocket ✓ lua-resty-redis -
Wiola: Публикация в luarocks, opm 40 • luarocks: есть одна
часть зависимостей, нет другой: - lua-resty-websocket - lua-resty-redis ✓ rapidjson ✓ lua-resty-hmac ✓ lua-messagepack • opm (OpenResty Package Manager): с точностью до «наоборот»: ✓ lua-resty-websocket ✓ lua-resty-redis - rapidjson -
Wiola: Публикация в luarocks, opm 40 • luarocks: есть одна
часть зависимостей, нет другой: - lua-resty-websocket - lua-resty-redis ✓ rapidjson ✓ lua-resty-hmac ✓ lua-messagepack • opm (OpenResty Package Manager): с точностью до «наоборот»: ✓ lua-resty-websocket ✓ lua-resty-redis - rapidjson ✓ lua-resty-hmac -
Wiola: Публикация в luarocks, opm 40 • luarocks: есть одна
часть зависимостей, нет другой: - lua-resty-websocket - lua-resty-redis ✓ rapidjson ✓ lua-resty-hmac ✓ lua-messagepack • opm (OpenResty Package Manager): с точностью до «наоборот»: ✓ lua-resty-websocket ✓ lua-resty-redis - rapidjson ✓ lua-resty-hmac - lua-messagepack -
Полезные ссылки про WAMP • Основной сайт про WAMP: http://wamp-proto.org/
• Спека WAMP на github: github.com/wamp-proto/wamp-proto • Mailing list: https://groups.google.com/forum/#!forum/wampws • Wiola: https://github.com/KSDaemon/wiola • Loowy: https://github.com/KSDaemon/Loowy • Wampy.js: https://github.com/KSDaemon/wampy.js • Wiola docker image: https://hub.docker.com/r/421p/wiola/ • Crossbar Router: https://crossbar.io/ и https://demo.crossbar.io/ 41 -
WAMP: Заключение • Простой и открытый протокол • RPC и
PubSub в одном транспорте/протоколе 42 -
WAMP: Заключение • Простой и открытый протокол • RPC и
PubSub в одном транспорте/протоколе • Любой транспорт и сериализация 42 -
WAMP: Заключение • Простой и открытый протокол • RPC и
PubSub в одном транспорте/протоколе • Любой транспорт и сериализация • Позволяет строить распределённые приложения со слабосвязанными компонентами 42 -
WAMP: Заключение • Простой и открытый протокол • RPC и
PubSub в одном транспорте/протоколе • Любой транспорт и сериализация • Позволяет строить распределённые приложения со слабосвязанными компонентами • Есть реализации во многих языках 42 -
WAMP: Заключение • Простой и открытый протокол • RPC и
PubSub в одном транспорте/протоколе • Любой транспорт и сериализация • Позволяет строить распределённые приложения со слабосвязанными компонентами • Есть реализации во многих языках • Open source 42 -
WAMP: Заключение • Простой и открытый протокол • RPC и
PubSub в одном транспорте/протоколе • Любой транспорт и сериализация • Позволяет строить распределённые приложения со слабосвязанными компонентами • Есть реализации во многих языках • Open source • Небольшое, но дружелюбное сообщество 42 -
WAMP: Заключение • Полезное архитектурное решение • Отличный вариант для
IoT-проекта! (имхо: лучше чем MQTT) 43 -
WAMP: Заключение • Полезное архитектурное решение • Отличный вариант для
IoT-проекта! (имхо: лучше чем MQTT) • Попробуйте WAMP: 43 -
WAMP: Заключение • Полезное архитектурное решение • Отличный вариант для
IoT-проекта! (имхо: лучше чем MQTT) • Попробуйте WAMP: • Есть nginx/openresty? — попробуйте Wiola (bit.ly/wiola-router) 43 -
WAMP: Заключение • Полезное архитектурное решение • Отличный вариант для
IoT-проекта! (имхо: лучше чем MQTT) • Попробуйте WAMP: • Есть nginx/openresty? — попробуйте Wiola (bit.ly/wiola-router) • Используете docker? 43 -
WAMP: Заключение • Полезное архитектурное решение • Отличный вариант для
IoT-проекта! (имхо: лучше чем MQTT) • Попробуйте WAMP: • Есть nginx/openresty? — попробуйте Wiola (bit.ly/wiola-router) • Используете docker? • docker pull 421p/wiola 43 -
WAMP: Заключение • Полезное архитектурное решение • Отличный вариант для
IoT-проекта! (имхо: лучше чем MQTT) • Попробуйте WAMP: • Есть nginx/openresty? — попробуйте Wiola (bit.ly/wiola-router) • Используете docker? • docker pull 421p/wiola • docker pull crossbario/crossbar 43 -
WAMP: Заключение • Полезное архитектурное решение • Отличный вариант для
IoT-проекта! (имхо: лучше чем MQTT) • Попробуйте WAMP: • Есть nginx/openresty? — попробуйте Wiola (bit.ly/wiola-router) • Используете docker? • docker pull 421p/wiola • docker pull crossbario/crossbar • WAMP-клиент на любой вкус и цвет (wamp-proto.org/implementations/) 43 -
Спасибо за внимание! И ваши вопросы :) 44 Константин Буркалёв
• Mail: [email protected] • Twitter: @KSDaemon • GitHub: KSDaemon • Blog: blog.ksdaemon.ru • SDCast: sdcast.ksdaemon.ru