ݺߣ

ݺߣShare a Scribd company logo
Пара слов про
Константин Буркалёв, @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
Publisher 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 Calls
Caller 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
eventin
‘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
eventto
‘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
REGISTERRPC
REGISTERRPC
REGISTERRPC
SUBSCRIBE to TOPICs
Internal
service 1
SUBSCRIBE to TOPICs
Internal
service 2
Internal
service 3
Frontoffice
app
client
Frontoffice
app
client
CRUD
Nginx/HAProxy CRUD
CRUD
Backoffice
app
client
SUBSCRIBE to TOPICs
PUBLISHEvent
PUBLISHEvent
CALL RPCs
Nginx/HAProxy
Backoffice
app
client
DB
CRUD CRUD
Backoffice app
serverside
Frontoffice app
serverside
Большое интеграционное решение
ProvidesRPC
Publishevents
Subscribe
to topics
ProvidesRPC
Publishevents
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, ....)
CallRPC
CallRPC
Subscribe
to topics
Publishevents
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: kostik@ksdaemon.ru
• Twitter: @KSDaemon
• GitHub: KSDaemon
• Blog: blog.ksdaemon.ru

More Related Content

Пара слов про WAMP — Константин Буркалев — MoscowJS 13