Upgrade to Pro — share decks privately, control downloads, hide ads and more …

WAMP как основа композитных SOA-приложений и его имплементация на Lua

WAMP как основа композитных SOA-приложений и его имплементация на Lua

WAMP расшифровывается как Web Application Messaging Protocol. Это открытый протокол, реализующий два паттерна в рамках одного протокола: RPC и Publish/Subscribe. Как мне кажется, это отличная платформа для сферы Internet of Things, Smart City и вообще бизнес-приложений с большим количеством различных компонентов и сервисов.

Konstantin Burkalev

December 11, 2017
Tweet

More Decks by Konstantin Burkalev

Other Decks in Programming

Transcript

  1. Пара слов о себе… 2 • Системный архитектор • 15+

    лет опыта в ИТ • Автор и ведущий подкастов о разработке: SDCast & RadioJS • Активный участник группы разработки самого протокола WAMP • Автор и мейнтейнер нескольких реализаций WAMP, в том числе и на Lua
  2. План доклада Пример системы с применением WAMP Что такое протокол

    WAMP, и как он устроен WAMP как основа SOA-решений Сферы применения WAMP-клиент на Lua WAMP-роутер на Nginx/Lua 3
  3. Что такое WAMP • Расшифровывается как «Web Application Messaging Protocol»

    • Предназначен для коммуникации между программными компонентами практически в режиме реального времени 5
  4. Что такое WAMP • Расшифровывается как «Web Application Messaging Protocol»

    • Предназначен для коммуникации между программными компонентами практически в режиме реального времени • Предоставляет два механизма: • Publish/Subscribe (PubSub) • Remote Procedure Calls (RPC) 5
  5. Что такое WAMP • Расшифровывается как «Web Application Messaging Protocol»

    • Предназначен для коммуникации между программными компонентами практически в режиме реального времени • Предоставляет два механизма: • Publish/Subscribe (PubSub) • Remote Procedure Calls (RPC) • Двунаправленный, упорядоченный 5
  6. Что такое WAMP • Расшифровывается как «Web Application Messaging Protocol»

    • Предназначен для коммуникации между программными компонентами практически в режиме реального времени • Предоставляет два механизма: • Publish/Subscribe (PubSub) • Remote Procedure Calls (RPC) • Двунаправленный, упорядоченный • Для общения клиентов требуется WAMP-роутер 5
  7. Почему WAMP? •Открытая спецификация • Продуманный Publish/Subscribe • Продуманный Remote

    Procedure Calls • Роутинг сообщений • Кроссплатформенность 6
  8. Почему WAMP? •Открытая спецификация • Продуманный Publish/Subscribe • Продуманный Remote

    Procedure Calls • Роутинг сообщений • Кроссплатформенность • Есть реализации более чем на 15 языках 6
  9. Альтернативы 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 ✔ - - - ✔ -
  10. Архитектура WAMP 15 Realm. Домен, namespace, единое пространство в рамках

    которого определены ресурсы и происходит роутинг сообщений.
  11. Архитектура WAMP 18 Идентификаторы ресурсов, URI. Необходимы для топиков, процедур

    и ошибок. Например: Topic: «sensor.events» RPC: «discover.devices» message
  12. Основные понятия WAMP • Клиент. Может предоставлять или потреблять ресурсы,

    такие как подписки и RPC. • Роутер. Занимается авторизацией и маршрутизацией сообщений между клиентами. • Peer, узел. Может быть клиентом или роутером, должен обладать хотя бы одной ролью. • Роль. Определяет возможности узла. Есть 4 клиентских роли и 2 роли роутера. • Сессия. Необходима для идентификации и авторизации клиентов, анонса ролей узлов. • Realm. Домен, namespace, в рамках которого происходит роутинг сообщений. • Транспорт. Можно использовать: WebSockets, Raw TCP, Unix sockets и даже HTTP Long poll. • Сериализатор. Cообщения сериализуются с помощью JSON/MessagePack/CBOR • Идентификаторы ресурсов, URI. Необходимы для топиков, процедур и ошибок. 19
  13. 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
  14. WAMP: установка сессии 21 HELLO WELCOME ABORT Клиент Роутер Realm

    [3, {"message": "The realm does not exist."}, "wamp.error.no_such_realm"]
  15. WAMP: установка сессии 21 HELLO WELCOME GOODBYE (init by client)

    ABORT Клиент Роутер Realm [6, {"message": "The host is shutting down now."}, "wamp.error.system_shutdown"]
  16. WAMP: установка сессии 21 HELLO WELCOME GOODBYE (init by client)

    ABORT GOODBYE Клиент Роутер Realm [6, {}, "wamp.error.goodbye_and_out"]
  17. WAMP: установка сессии 21 HELLO WELCOME GOODBYE (init by client)

    ABORT GOODBYE GOODBYE (init by router) Клиент Роутер Realm [6, {}, "wamp.error.close_realm"]
  18. WAMP: установка сессии 21 HELLO WELCOME GOODBYE (init by client)

    ABORT GOODBYE GOODBYE GOODBYE (init by router) Клиент Роутер Realm [6, {}, "wamp.error.goodbye_and_out"]
  19. WAMP: установка сессии 21 HELLO WELCOME GOODBYE (init by client)

    ABORT GOODBYE GOODBYE GOODBYE (init by router) Клиент Роутер Realm
  20. WAMP: Publish / Subscribe 22 SUBSCRIBE SUBSCRIBED ERROR Publisher Broker

    Subscriber Realm [8, 32, 713845233, {}, "wamp.error.not_authorized"]
  21. WAMP: Publish / Subscribe 22 SUBSCRIBE SUBSCRIBED ERROR PUBLISH Publisher

    Broker Subscriber Realm [16, 239714735, {}, "sensor.events", [], {"sensorId ": 25, "temp": 27}]
  22. WAMP: Publish / Subscribe 22 SUBSCRIBE SUBSCRIBED ERROR PUBLISH PUBLISHED

    Publisher Broker Subscriber Realm [17, 239714735, 4429313566]
  23. WAMP: Publish / Subscribe 22 SUBSCRIBE SUBSCRIBED ERROR PUBLISH PUBLISHED

    ERROR Publisher Broker Subscriber Realm [8, 16, 239714735, {}, "wamp.error.not_authorized"]
  24. WAMP: Publish / Subscribe 22 SUBSCRIBE SUBSCRIBED ERROR PUBLISH PUBLISHED

    ERROR EVENT Publisher Broker Subscriber Realm [36, 5512315355, 4429313566, {}, [], {"sensorId ": 25, "temp": 27}]
  25. WAMP: Publish / Subscribe 22 SUBSCRIBE SUBSCRIBED UNSUBSCRIBE ERROR PUBLISH

    PUBLISHED ERROR EVENT Publisher Broker Subscriber Realm [34, 85346237, 5512315355]
  26. WAMP: Publish / Subscribe 22 SUBSCRIBE SUBSCRIBED UNSUBSCRIBE UNSUBSCRIBED ERROR

    PUBLISH PUBLISHED ERROR EVENT Publisher Broker Subscriber Realm [35, 85346237]
  27. 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"]
  28. WAMP: Publish / Subscribe 22 SUBSCRIBE SUBSCRIBED UNSUBSCRIBE UNSUBSCRIBED ERROR

    ERROR PUBLISH PUBLISHED ERROR EVENT Publisher Broker Subscriber Realm
  29. WAMP: Remote Procedure Calls 23 Caller Dealer Callee REGISTER REGISTERED

    ERROR Realm [8, 64, 25349185, {}, "wamp.error.procedure_already_exists"]
  30. WAMP: Remote Procedure Calls 23 Caller Dealer Callee REGISTER REGISTERED

    ERROR CALL Realm [48, 7814135, {}, "dcs.fan.control", [true]]
  31. WAMP: Remote Procedure Calls 23 Caller Dealer Callee REGISTER REGISTERED

    ERROR CALL INVOCATION Realm [68, 6131533, 9823528, {}, [true]]
  32. WAMP: Remote Procedure Calls 23 Caller Dealer Callee REGISTER REGISTERED

    ERROR CALL INVOCATION YIELD Realm [70, 6131533, {}]
  33. WAMP: Remote Procedure Calls 23 Caller Dealer Callee REGISTER REGISTERED

    ERROR CALL RESULT INVOCATION YIELD Realm [50, 7814135, {}]
  34. 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"]
  35. 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"]
  36. WAMP: Remote Procedure Calls 23 Caller Dealer Callee REGISTER REGISTERED

    UNREGISTER ERROR CALL RESULT INVOCATION YIELD ERROR ERROR Realm [66, 788923562, 2103333224]
  37. WAMP: Remote Procedure Calls 23 Caller Dealer Callee REGISTER REGISTERED

    UNREGISTER UNREGISTERED ERROR CALL RESULT INVOCATION YIELD ERROR ERROR Realm [67, 788923562]
  38. 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"]
  39. WAMP: Remote Procedure Calls 23 Caller Dealer Callee REGISTER REGISTERED

    UNREGISTER UNREGISTERED ERROR ERROR CALL RESULT INVOCATION YIELD ERROR ERROR Realm
  40. WAMP как основа SOA-решений Распределённая архитектура Слабая связанность компонентов Простой

    и понятный интерфейс взаимодействия Унифицированная маршрутизация 24
  41. WAMP как основа SOA-решений Распределённая архитектура Слабая связанность компонентов Простой

    и понятный интерфейс взаимодействия Унифицированная маршрутизация Независимость от языка программирования 24
  42. WAMP как основа SOA-решений Распределённая архитектура Слабая связанность компонентов Простой

    и понятный интерфейс взаимодействия Унифицированная маршрутизация Независимость от языка программирования Переиспользуемость компонентов 24
  43. WAMP как основа SOA-решений Распределённая архитектура Слабая связанность компонентов Простой

    и понятный интерфейс взаимодействия Унифицированная маршрутизация Независимость от языка программирования Переиспользуемость компонентов WAMP удовлетворяет требованиям SOA 24
  44. WAMP в качестве ESB 25 WAMP Router Service Providers Service

    Providers Service Providers Service Providers Service Providers Consumers Consumers Consumers Consumers Consumers Вызывают RPC Подписываются на топики Регистрируют RPC Публикуют события Подписываются на топики Публикуют события Сервер Сервер Сервер
  45. 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 Сервер Сервер Сервер
  46. Сферы применения WAMP 27 Распределённые приложения с большим количеством сервисов

    Smart homes, Smart cities, Интернет вещей в целом Системы с долго выполняющимися процессами
  47. Сферы применения WAMP 27 Распределённые приложения с большим количеством сервисов

    Smart homes, Smart cities, Интернет вещей в целом Системы с долго выполняющимися процессами Лёгкая современная альтернатива XMPP, XMLRPC
  48. Сферы применения WAMP 27 Распределённые приложения с большим количеством сервисов

    Smart homes, Smart cities, Интернет вещей в целом Системы с долго выполняющимися процессами Лёгкая современная альтернатива XMPP, XMLRPC Сетевые игры
  49. Применение WAMP: реальные проекты • Kadecot API Server. Sony Computer

    Science Laboratories • ParaView. Parallel Data Analysis and Visualization Application, Kitware 28
  50. Применение WAMP: реальные проекты • Kadecot API Server. Sony Computer

    Science Laboratories • ParaView. Parallel Data Analysis and Visualization Application, Kitware • Record.Evolution. Data-warehouse and Business Intelligence 28
  51. Применение 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
  52. Применение 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
  53. 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
  54. Loowy: WAMP-клиент на Lua 30 • Работает в Lua/Luajit на

    базе lua-ev • Поддерживает JSON- и Msgpack-сериализаторы
  55. Loowy: WAMP-клиент на Lua 30 • Работает в Lua/Luajit на

    базе lua-ev • Поддерживает JSON- и Msgpack-сериализаторы • Поддерживает ряд фич из Advanced Profile
  56. Loowy: WAMP-клиент на Lua 30 • Работает в Lua/Luajit на

    базе lua-ev • Поддерживает JSON- и Msgpack-сериализаторы • Поддерживает ряд фич из Advanced Profile • Автоматическое переподключение и переподписка
  57. 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)
  58. 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 })
  59. Loowy: Стек технологий 32 • Lua 5.1+, Luajit 2.0 •

    lua-websockets (который работает через luasocket) • lua-ev • lua-rapidjson • lua-MessagePack (опционально)
  60. Wiola: WAMP роутер на Lua • Работает на базе Nginx/Lua

    module • Использует Redis для runtime storage 33
  61. Wiola: WAMP роутер на Lua • Работает на базе Nginx/Lua

    module • Использует Redis для runtime storage • Поддерживает JSON- и MessagePack-сериализаторы 33
  62. Wiola: WAMP роутер на Lua • Работает на базе Nginx/Lua

    module • Использует Redis для runtime storage • Поддерживает JSON- и MessagePack-сериализаторы • Поддерживает ряд фич из Advanced Profile 33
  63. 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
  64. Wiola: стек технологий 34 • Nginx или OpenResty, проще говоря

    lua-nginx-module • lua-resty-websocket • lua-resty-redis • Redis Server • lua-rapidjson • lua-resty-hmac (опционально, нужен для WAMP-CRA) • lua-MessagePack (опционально)
  65. 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; }
  66. Wiola: Особенности. JSON • cJSON • нельзя указать способ сериализации

    пустых таблиц • lua-resty-libcjson • не умеет работать с большими числами (int > 32bit) 37
  67. Wiola: Особенности. JSON • cJSON • нельзя указать способ сериализации

    пустых таблиц • lua-resty-libcjson • не умеет работать с большими числами (int > 32bit) lua-rapidjson 37
  68. Wiola: Особенности. JSON • cJSON • нельзя указать способ сериализации

    пустых таблиц • lua-resty-libcjson • не умеет работать с большими числами (int > 32bit) lua-rapidjson • пока новых проблем не нашлось :) 37
  69. Wiola: Особенности. Runtime-хранилище 38 • Глобальные переменные в памяти •

    Создаются каждый раз на request handler • проблемы с concurrent requests
  70. Wiola: Особенности. Runtime-хранилище 38 • Глобальные переменные в памяти •

    Создаются каждый раз на request handler • проблемы с concurrent requests • Переменные модуля, загружаемого в init_by_lua
  71. Wiola: Особенности. Runtime-хранилище 38 • Глобальные переменные в памяти •

    Создаются каждый раз на request handler • проблемы с concurrent requests • Переменные модуля, загружаемого в init_by_lua • Читать можно во всех воркерах
  72. Wiola: Особенности. Runtime-хранилище 38 • Глобальные переменные в памяти •

    Создаются каждый раз на request handler • проблемы с concurrent requests • Переменные модуля, загружаемого в init_by_lua • Читать можно во всех воркерах • Но запись, спасибо CoW, создаст свою копию модуля для VM
  73. Wiola: Особенности. Runtime-хранилище 38 • Глобальные переменные в памяти •

    Создаются каждый раз на request handler • проблемы с concurrent requests • Переменные модуля, загружаемого в init_by_lua • Читать можно во всех воркерах • Но запись, спасибо CoW, создаст свою копию модуля для VM • ngx.shared.DICT
  74. Wiola: Особенности. Runtime-хранилище 38 • Глобальные переменные в памяти •

    Создаются каждый раз на request handler • проблемы с concurrent requests • Переменные модуля, загружаемого в init_by_lua • Читать можно во всех воркерах • Но запись, спасибо CoW, создаст свою копию модуля для VM • ngx.shared.DICT • Размер каждого словаря задаётся в конфиге и не может изменяться
  75. Wiola: Особенности. Runtime-хранилище 38 • Глобальные переменные в памяти •

    Создаются каждый раз на request handler • проблемы с concurrent requests • Переменные модуля, загружаемого в init_by_lua • Читать можно во всех воркерах • Но запись, спасибо CoW, создаст свою копию модуля для VM • ngx.shared.DICT • Размер каждого словаря задаётся в конфиге и не может изменяться Внешнее хранилище: Redis, Memcache, PostgreSQL, MySQL и прочие
  76. Wiola: Особенности. lua_code_cache 39 • lua_code_cache off; • удобно отлаживать

    код • каждый require() выполняется заново в каждом запросе
  77. Wiola: Особенности. lua_code_cache 39 • lua_code_cache off; • удобно отлаживать

    код • каждый require() выполняется заново в каждом запросе • даже модули, загруженные в init_by_lua, выполняются заново
  78. Wiola: Особенности. lua_code_cache 39 • lua_code_cache off; • удобно отлаживать

    код • каждый require() выполняется заново в каждом запросе • даже модули, загруженные в init_by_lua, выполняются заново • lua_code_cache on;
  79. Wiola: Особенности. lua_code_cache 39 • lua_code_cache off; • удобно отлаживать

    код • каждый require() выполняется заново в каждом запросе • даже модули, загруженные в init_by_lua, выполняются заново • lua_code_cache on; • для production-окружения
  80. Wiola: Особенности. lua_code_cache 39 • lua_code_cache off; • удобно отлаживать

    код • каждый require() выполняется заново в каждом запросе • даже модули, загруженные в init_by_lua, выполняются заново • lua_code_cache on; • для production-окружения • каждый require() выполняется один раз и кэшируется
  81. Wiola: Особенности. lua_code_cache 39 • lua_code_cache off; • удобно отлаживать

    код • каждый require() выполняется заново в каждом запросе • даже модули, загруженные в init_by_lua, выполняются заново • lua_code_cache on; • для production-окружения • каждый require() выполняется один раз и кэшируется • при любом изменении кода необходимо перегружать nginx
  82. Wiola: Публикация в luarocks, opm 40 • luarocks: есть одна

    часть зависимостей, нет другой:
  83. Wiola: Публикация в luarocks, opm 40 • luarocks: есть одна

    часть зависимостей, нет другой: - lua-resty-websocket
  84. Wiola: Публикация в luarocks, opm 40 • luarocks: есть одна

    часть зависимостей, нет другой: - lua-resty-websocket - lua-resty-redis
  85. Wiola: Публикация в luarocks, opm 40 • luarocks: есть одна

    часть зависимостей, нет другой: - lua-resty-websocket - lua-resty-redis ✓ rapidjson
  86. Wiola: Публикация в luarocks, opm 40 • luarocks: есть одна

    часть зависимостей, нет другой: - lua-resty-websocket - lua-resty-redis ✓ rapidjson ✓ lua-resty-hmac
  87. Wiola: Публикация в luarocks, opm 40 • luarocks: есть одна

    часть зависимостей, нет другой: - lua-resty-websocket - lua-resty-redis ✓ rapidjson ✓ lua-resty-hmac ✓ lua-messagepack
  88. Wiola: Публикация в luarocks, opm 40 • luarocks: есть одна

    часть зависимостей, нет другой: - lua-resty-websocket - lua-resty-redis ✓ rapidjson ✓ lua-resty-hmac ✓ lua-messagepack • opm (OpenResty Package Manager): с точностью до «наоборот»:
  89. Wiola: Публикация в luarocks, opm 40 • luarocks: есть одна

    часть зависимостей, нет другой: - lua-resty-websocket - lua-resty-redis ✓ rapidjson ✓ lua-resty-hmac ✓ lua-messagepack • opm (OpenResty Package Manager): с точностью до «наоборот»: ✓ lua-resty-websocket
  90. 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
  91. 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
  92. 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
  93. 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
  94. Полезные ссылки про 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
  95. WAMP: Заключение • Простой и открытый протокол • RPC и

    PubSub в одном транспорте/протоколе 42
  96. WAMP: Заключение • Простой и открытый протокол • RPC и

    PubSub в одном транспорте/протоколе • Любой транспорт и сериализация 42
  97. WAMP: Заключение • Простой и открытый протокол • RPC и

    PubSub в одном транспорте/протоколе • Любой транспорт и сериализация • Позволяет строить распределённые приложения со слабосвязанными компонентами 42
  98. WAMP: Заключение • Простой и открытый протокол • RPC и

    PubSub в одном транспорте/протоколе • Любой транспорт и сериализация • Позволяет строить распределённые приложения со слабосвязанными компонентами • Есть реализации во многих языках 42
  99. WAMP: Заключение • Простой и открытый протокол • RPC и

    PubSub в одном транспорте/протоколе • Любой транспорт и сериализация • Позволяет строить распределённые приложения со слабосвязанными компонентами • Есть реализации во многих языках • Open source 42
  100. WAMP: Заключение • Простой и открытый протокол • RPC и

    PubSub в одном транспорте/протоколе • Любой транспорт и сериализация • Позволяет строить распределённые приложения со слабосвязанными компонентами • Есть реализации во многих языках • Open source • Небольшое, но дружелюбное сообщество 42
  101. WAMP: Заключение • Полезное архитектурное решение • Отличный вариант для

    IoT-проекта! (имхо: лучше чем MQTT) • Попробуйте WAMP: 43
  102. WAMP: Заключение • Полезное архитектурное решение • Отличный вариант для

    IoT-проекта! (имхо: лучше чем MQTT) • Попробуйте WAMP: • Есть nginx/openresty? — попробуйте Wiola (bit.ly/wiola-router) 43
  103. WAMP: Заключение • Полезное архитектурное решение • Отличный вариант для

    IoT-проекта! (имхо: лучше чем MQTT) • Попробуйте WAMP: • Есть nginx/openresty? — попробуйте Wiola (bit.ly/wiola-router) • Используете docker? 43
  104. WAMP: Заключение • Полезное архитектурное решение • Отличный вариант для

    IoT-проекта! (имхо: лучше чем MQTT) • Попробуйте WAMP: • Есть nginx/openresty? — попробуйте Wiola (bit.ly/wiola-router) • Используете docker? • docker pull 421p/wiola 43
  105. WAMP: Заключение • Полезное архитектурное решение • Отличный вариант для

    IoT-проекта! (имхо: лучше чем MQTT) • Попробуйте WAMP: • Есть nginx/openresty? — попробуйте Wiola (bit.ly/wiola-router) • Используете docker? • docker pull 421p/wiola • docker pull crossbario/crossbar 43
  106. 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
  107. Спасибо за внимание! И ваши вопросы :) 44 Константин Буркалёв

    • Mail: [email protected] • Twitter: @KSDaemon • GitHub: KSDaemon • Blog: blog.ksdaemon.ru • SDCast: sdcast.ksdaemon.ru