Пара слов про
Константин Буркалёв, @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 / SubscribePublisher Broker Subscriber
Publish / Subscribe
SUBSCRIBE
Publisher Broker Subscriber
Publish / Subscribe
SUBSCRIBE
SUBSCRIBED
Publisher Broker Subscriber
Publish / Subscribe
SUBSCRIBE
SUBSCRIBED
ERROR
Publisher Broker Subscriber
Publish / Subscribe
SUBSCRIBE
SUBSCRIBED
ERROR
PUBLISH
Publisher Broker Subscriber
Publish / Subscribe
SUBSCRIBE
SUBSCRIBED
ERROR
PUBLISH
PUBLISHED
Publisher Broker Subscriber
Publish / Subscribe
SUBSCRIBE
SUBSCRIBED
ERROR
PUBLISH
PUBLISHED
ERROR
Publisher Broker Subscriber
Publish / Subscribe
SUBSCRIBE
SUBSCRIBED
ERROR
PUBLISH
PUBLISHED
ERROR
EVENT
Publisher Broker Subscriber
Publish / Subscribe
SUBSCRIBE
SUBSCRIBED
UNSUBSCRIBE
ERROR
PUBLISH
PUBLISHED
ERROR
EVENT
Publisher Broker Subscriber
Publish / Subscribe
SUBSCRIBE
SUBSCRIBED
UNSUBSCRIBE
UNSUBSCRIBED
ERROR
PUBLISH
PUBLISHED
ERROR
EVENT
Publisher Broker Subscriber
Publish / Subscribe
SUBSCRIBE
SUBSCRIBED
UNSUBSCRIBE
UNSUBSCRIBED
ERROR
ERROR
PUBLISH
PUBLISHED
ERROR
EVENT
Publisher Broker Subscriber
Remote Procedure CallsCaller Dealer Callee
Remote Procedure Calls
REGISTER
Caller Dealer Callee
Remote Procedure Calls
REGISTER
REGISTERED
Caller Dealer Callee
Remote Procedure Calls
REGISTER
REGISTERED
ERROR
Caller Dealer Callee
Remote Procedure Calls
REGISTER
REGISTERED
ERROR
CALL
Caller Dealer Callee
Remote Procedure Calls
REGISTER
REGISTERED
ERROR
CALL
INVOCATION
Caller Dealer Callee
Remote Procedure Calls
REGISTER
REGISTERED
ERROR
CALL
INVOCATION
YIELD
Caller Dealer Callee
Remote Procedure Calls
REGISTER
REGISTERED
ERROR
CALL
INVOCATION
YIELD
ERROR
Caller Dealer Callee
Remote Procedure Calls
REGISTER
REGISTERED
ERROR
CALL
RESULT
INVOCATION
YIELD
ERROR
Caller Dealer Callee
Remote Procedure Calls
REGISTER
REGISTERED
ERROR
CALL
RESULT
INVOCATION
YIELD
ERROR
ERROR
Caller Dealer Callee
Remote Procedure Calls
REGISTER
REGISTERED
UNREGISTER
ERROR
CALL
RESULT
INVOCATION
YIELD
ERROR
ERROR
Caller Dealer Callee
Remote Procedure Calls
REGISTER
REGISTERED
UNREGISTER
UNREGISTERED
ERROR
CALL
RESULT
INVOCATION
YIELD
ERROR
ERROR
Caller Dealer Callee
Remote Procedure Calls
REGISTER
REGISTERED
UNREGISTER
UNREGISTERED
ERROR
ERROR
CALL
RESULT
INVOCATION
YIELD
ERROR
ERROR
Caller Dealer Callee
Профили
• 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
Top Related