Пара слов про wamp
DESCRIPTION
Небольшой доклад о протоколе WAMP (WebSocket Application Messaging Protocol), его устройстве, архитектуре, реализациях и возможном применении.TRANSCRIPT
Пара слов про
Константин Буркалёв, @KSDaemonMoscowJS, июль 2014
≠WAMP
Windows, Apache, MySQL, PHP
Протокол прикладного уровня, 1реализует 2 паттерна:
• Publish/Subscribe (PubSub)1• Remote Procedure Calls (RPC)
=WAMP
Основные компоненты и понятия
• Идентификаторы ресурсов • Транспорт • Сериализатор • Сессия • Realm - домен, namespace • Peer — узел • Клиент • Роутер • Роль
Архитектура
Идентификаторы ресурсов
• Подписок • Процедур • Ошибок
Необходимы для:
Представляют собой URI• system.send.file • chat.message • users.admins.message • user.profile.updated
Сериализация и типы данных
• integer • string • bool • list (array) • dict
Поддерживаемые сериализаторы:• JSON • MsgPack
Поддерживаемые типы данных:Обязательные: Дополнительно:
любые, зависит от поддержки в сериализаторе
Сообщения и полезная нагрузка• [HELLO, Realm|uri, Details|dict] 1
• [PUBLISH, Request|id, Options|dict, Topic|uri] • [PUBLISH, Request|id, Options|dict, Topic|uri, Arguments|list] • [PUBLISH, Request|id, Options|dict, Topic|uri, Arguments|list, ArgumentsKw|dict] 1
• [CALL, Request|id, Options|dict, Procedure|uri] • [CALL, Request|id, Options|dict, Procedure|uri, Arguments|list] • [CALL, Request|id, Options|dict, Procedure|uri, Arguments|list, ArgumentsKw|dict] 1
• [RESULT, CALL.Request|id, Details|dict] • [RESULT, CALL.Request|id, Details|dict, YIELD.Arguments|list] • [RESULT, CALL.Request|id, Details|dict, YIELD.Arguments|list, YIELD.ArgumentsKw|dict]
• Массивов | Array | List • Словарей | Hash-table | Dictionary
Параметры-данные могут быть в виде:
Транспорт
• Websocket • Raw TCP • HTTP long-polling (в разработке) • Unix sockets
• В основе лежат сообщения • Сообщения упорядочены • Двунаправленный обмен сообщениями
Транспорт и сессия
РоутерКлиент
Транспорт и сессия
РоутерКлиентHELLO
Транспорт и сессия
РоутерКлиентHELLO
WELCOME
Транспорт и сессия
РоутерКлиентHELLO
WELCOME
ABORT
Транспорт и сессия
РоутерКлиентHELLO
WELCOME
GOODBYE
ABORT
Транспорт и сессия
РоутерКлиентHELLO
WELCOME
GOODBYE
ABORT
GOODBYE
Транспорт и сессия
РоутерКлиентHELLO
WELCOME
GOODBYE
ABORT
GOODBYE
GOODBYE
Транспорт и сессия
РоутерКлиентHELLO
WELCOME
GOODBYE
ABORT
GOODBYE
GOODBYE
GOODBYE
Publish / Subscribe
BrokerPublisher Subscriber
Publish / Subscribe
BrokerPublisher SubscriberSUBSCRIBE
Publish / Subscribe
BrokerPublisher SubscriberSUBSCRIBE
SUBSCRIBED
Publish / Subscribe
BrokerPublisher SubscriberSUBSCRIBE
SUBSCRIBED
ERROR
Publish / Subscribe
BrokerPublisher SubscriberSUBSCRIBE
SUBSCRIBED
ERROR
PUBLISH
Publish / Subscribe
BrokerPublisher SubscriberSUBSCRIBE
SUBSCRIBED
ERROR
PUBLISH
PUBLISHED
Publish / Subscribe
BrokerPublisher SubscriberSUBSCRIBE
SUBSCRIBED
ERROR
PUBLISH
PUBLISHED
ERROR
Publish / Subscribe
BrokerPublisher SubscriberSUBSCRIBE
SUBSCRIBED
ERROR
PUBLISH
PUBLISHED
ERROR
EVENT
Publish / Subscribe
BrokerPublisher SubscriberSUBSCRIBE
SUBSCRIBED
UNSUBSCRIBE
ERROR
PUBLISH
PUBLISHED
ERROR
EVENT
Publish / Subscribe
BrokerPublisher SubscriberSUBSCRIBE
SUBSCRIBED
UNSUBSCRIBE
UNSUBSCRIBED
ERROR
PUBLISH
PUBLISHED
ERROR
EVENT
Publish / Subscribe
BrokerPublisher SubscriberSUBSCRIBE
SUBSCRIBED
UNSUBSCRIBE
UNSUBSCRIBED
ERROR
ERROR
PUBLISH
PUBLISHED
ERROR
EVENT
Remote Procedure Calls
DealerCaller Callee
Remote Procedure Calls
DealerCaller CalleeREGISTER
Remote Procedure Calls
DealerCaller CalleeREGISTER
REGISTERED
Remote Procedure Calls
DealerCaller CalleeREGISTER
REGISTERED
ERROR
Remote Procedure Calls
DealerCaller CalleeREGISTER
REGISTERED
ERROR
CALL
Remote Procedure Calls
DealerCaller CalleeREGISTER
REGISTERED
ERROR
CALL
INVOCATION
Remote Procedure Calls
DealerCaller CalleeREGISTER
REGISTERED
ERROR
CALL
INVOCATION
YIELD
Remote Procedure Calls
DealerCaller CalleeREGISTER
REGISTERED
ERROR
CALL
INVOCATION
YIELD
ERROR
Remote Procedure Calls
DealerCaller CalleeREGISTER
REGISTERED
ERROR
CALL
RESULT
INVOCATION
YIELD
ERROR
Remote Procedure Calls
DealerCaller CalleeREGISTER
REGISTERED
ERROR
CALL
RESULT
INVOCATION
YIELD
ERROR
ERROR
Remote Procedure Calls
DealerCaller CalleeREGISTER
REGISTERED
UNREGISTER
ERROR
CALL
RESULT
INVOCATION
YIELD
ERROR
ERROR
Remote Procedure Calls
DealerCaller CalleeREGISTER
REGISTERED
UNREGISTER
UNREGISTERED
ERROR
CALL
RESULT
INVOCATION
YIELD
ERROR
ERROR
Remote Procedure Calls
DealerCaller CalleeREGISTER
REGISTERED
UNREGISTER
UNREGISTERED
ERROR
ERROR
CALL
RESULT
INVOCATION
YIELD
ERROR
ERROR
Профили
• Basic profile • Advanced profile
Набор функциональных возможностей в рамках каждого паттерна (PubSub, RPC)
Advanced profile
• Управление сессией • Аутентификация • Heartbeat
Advanced profile
• Publish / Subscribe • белый и черный списки • идентификация издателя • подписки по паттернам • метасобытия • список подписчиков • список событий
Advanced profile
• Remote Procedure Calls • белый и черный списки • идентификация вызывающего • регистрация RPC по паттернам • отмена выполнения • прогрессивное выполнение
ПрименениеОнлайн-консультант
Browser
Embedded app
client
Browser
Embedded app
client
Browser
Backoffice app
client
Browser
Backoffice app
client
WAMP Router(realm 1)
Browser
Embedded app
client
Browser
Embedded app
client
WAMP Router(realm 2)
ПрименениеОнлайн-консультант
Browser
Embedded app
client
Browser
Embedded app
client
Browser
Backoffice app
client
Browser
Backoffice app
client
WAMP Router(realm 1)
Browser
Embedded app
client
Browser
Embedded app
client
subscribe to ‘ready.for.chat’
subscribe to ‘ready.for.chat’
WAMP Router(realm 2)
ПрименениеОнлайн-консультант
Browser
Embedded app
client
Browser
Embedded app
client
Browser
Backoffice app
client
Browser
Backoffice app
client
WAMP Router(realm 1)
Browser
Embedded app
client
Browser
Embedded app
client
WAMP Router(realm 2)
subscribe to ‘chat.taken’
subscribe to ‘chat.taken’
ПрименениеОнлайн-консультант
Browser
Embedded app
client
Browser
Embedded app
client
Browser
Backoffice app
client
Browser
Backoffice app
client
WAMP Router(realm 1)
Browser
Embedded app
client
Browser
Embedded app
client
subscribe to ‘user.chat.id1235’
WAMP Router(realm 2)
ПрименениеОнлайн-консультант
Browser
Embedded app
client
Browser
Embedded app
client
Browser
Backoffice app
client
Browser
Backoffice app
client
WAMP Router(realm 1)
Browser
Embedded app
client
Browser
Embedded app
client
publish event to ‘ready.for.chat’
WAMP Router(realm 2)
ПрименениеОнлайн-консультант
Browser
Embedded app
client
Browser
Embedded app
client
Browser
Backoffice app
client
Browser
Backoffice app
client
WAMP Router(realm 1)
Browser
Embedded app
client
Browser
Embedded app
client
receive event in ‘ready.for.chat’
receive event in ‘ready.for.chat’
WAMP Router(realm 2)
ПрименениеОнлайн-консультант
Browser
Embedded app
client
Browser
Embedded app
client
Browser
Backoffice app
client
Browser
Backoffice app
client
WAMP Router(realm 1)
Browser
Embedded app
client
Browser
Embedded app
client
publish event to ‘chat.taken’
WAMP Router(realm 2)
ПрименениеОнлайн-консультант
Browser
Embedded app
client
Browser
Embedded app
client
Browser
Backoffice app
client
Browser
Backoffice app
client
WAMP Router(realm 1)
Browser
Embedded app
client
Browser
Embedded app
client
receive event in ‘chat.taken’
WAMP Router(realm 2)
ПрименениеОнлайн-консультант
Browser
Embedded app
client
Browser
Embedded app
client
Browser
Backoffice app
client
Browser
Backoffice app
client
WAMP Router(realm 1)
Browser
Embedded app
client
Browser
Embedded app
client
publish event to ‘user.chat.id1235’
WAMP Router(realm 2)
ПрименениеОнлайн-консультант
Browser
Embedded app
client
Browser
Embedded app
client
Browser
Backoffice app
client
Browser
Backoffice app
client
WAMP Router(realm 1)
Browser
Embedded app
client
Browser
Embedded app
client
receive event in ‘user.chat.id1235’
WAMP Router(realm 2)
ПрименениеОнлайн-консультант
Browser
Embedded app
client
Browser
Embedded app
client
Browser
Backoffice app
client
Browser
Backoffice app
client
WAMP Router(realm 1)
Browser
Embedded app
client
Browser
Embedded app
client
subscribe to ‘user.chat.id2425’
WAMP Router(realm 2)
ПрименениеОнлайн-консультант
Browser
Embedded app
client
Browser
Embedded app
client
Browser
Backoffice app
client
Browser
Backoffice app
client
WAMP Router(realm 1)
Browser
Embedded app
client
Browser
Embedded app
client
publish event to ‘ready.for.chat’
WAMP Router(realm 2)
ПрименениеОнлайн-консультант
Browser
Embedded app
client
Browser
Embedded app
client
Browser
Backoffice app
client
Browser
Backoffice app
client
WAMP Router(realm 1)
Browser
Embedded app
client
Browser
Embedded app
client
receive event in ‘ready.for.chat’
receive event in ‘ready.for.chat’
WAMP Router(realm 2)
ПрименениеОнлайн-консультант
Browser
Embedded app
client
Browser
Embedded app
client
Browser
Backoffice app
client
Browser
Backoffice app
client
WAMP Router(realm 1)
Browser
Embedded app
client
Browser
Embedded app
client
publish event to ‘chat.taken’
WAMP Router(realm 2)
ПрименениеОнлайн-консультант
Browser
Embedded app
client
Browser
Embedded app
client
Browser
Backoffice app
client
Browser
Backoffice app
client
WAMP Router(realm 1)
Browser
Embedded app
client
Browser
Embedded app
client
receive event in ‘chat.taken’WAMP Router
(realm 2)
ПрименениеОнлайн-консультант
Browser
Embedded app
client
Browser
Embedded app
client
Browser
Backoffice app
client
Browser
Backoffice app
client
WAMP Router(realm 1)
Browser
Embedded app
client
Browser
Embedded app
client
publish event to ‘user.chat.id2425’
WAMP Router(realm 2)
ПрименениеОнлайн-консультант
Browser
Embedded app
client
Browser
Embedded app
client
Browser
Backoffice app
client
Browser
Backoffice app
client
WAMP Router(realm 1)
Browser
Embedded app
client
Browser
Embedded app
client
receive event in ‘user.chat.id2425’
WAMP Router(realm 2)
ПрименениеОнлайн-консультант
Browser
Embedded app
client
Browser
Embedded app
client
Browser
Backoffice app
client
Browser
Backoffice app
client
WAMP Router(realm 1)
Browser
Embedded app
client
Browser
Embedded app
client
WAMP Router(realm 2)
Применение
Browser
Browser
Server side infrastructure
WAMP Router
Mobile
Desktop
REGI
STER
RPC
REG
ISTE
R RP
C REGISTER RPC
SUBSCRIBE to TOPICs
Internal service 1
SUBSCRIBE to TOPICs
Internal service 2
Internal service 3
Frontoffice app
client
Frontoffice app
client
CRUDN
gin
x /
HAPr
oxy
CRUD
CRUDBackoffice
appclient
SUBSCRIBE to TOPICs
PUBLISH Event PUBL
ISH
Even
t
CALL RPCs
Ngin
x /
HAPr
oxy
Backoffice app
client
DB
CRUD CRUD
Backoffice appserverside
Frontoffice appserverside
Большое интеграционное решение
Prov
ides R
PC
Publ
ish e
vent
s
Subscribe to topicsProv
ides
RPC
Publish events
Service Provider 1
Service Provider 2
Service Provider 3
Service Provider 4
Service Provider 5
Publish events
WAMP Router(realm 1, realm 2, realm 3, ....)
Call R
PC
Call RPC
Subs
cribe
to to
pics
Publ
ish e
vent
s
Consumer 1 Consumer 2 Consumer 3 Consumer 4 Consumer 5
ПрименениеWAMP как основа композитных SOA решений
ПрименениеWAMP как основа композитных SOA решений
• Унифицированная сервисная шина • Асинхронное выполнение процедур • Стандартизация интерфейсов взаимодействия • Минимальные накладные расходы • Гибкая инфраструктура • Изолированность и слабая связанность сервисов • Легкость подключения новых сервисов
Существующие реализации
• JavaScriptA• Autobahn|JS (browser, node.js) • Wampy.js (browser)
• JavaA• Autobahn|Android (скоро)
• .NETA• WampSharp (в процессе)
• PHPA• Thurway
Клиентские библиотеки• PythonA
• Autobahn|Python • C++A
• Autobahn|Cpp • ErlangA
• Erwa • Objective-CA
• MDWamp • Lua (в процессе)
Роутеры• PythonA
• Autobahn|Python • Crossbar.io
• ErlangA• Erwa
• PHPA• Thurway
• LuaA• Wiola
Итоги
• Простой и открытый протокол • RPC + PubSub из коробки • Унифицированная маршрутизация • Транспорт и сериализация на любой вкус • Минимальные накладные расходы • Нативное использование в веб-приложениях • Позволяет строить распределенные приложения со слабым связыванием компонентов
• Множество реализаций на разных языках • Open source & комьюнити
Полезные ссылки
• http://wamp.wsA• Описание • Спецификация • Реализации
• https://groups.google.com/group/wampws • http://autobahn.ws • https://github.com/crossbario/crossbar/wiki
• Crossbar.io • Примеры клиентов на разных языках
Вот и все!1Но, возможно, есть вопросы
?
Константин Буркалёв
Спасибо за внимание!
• Mail: [email protected] • Twitter: @KSDaemon • GitHub: KSDaemon • Blog: blog.ksdaemon.ru