Content deleted Content added
m Comparison: XMPP supports RPC |
fix links and small grammar issues |
||
Line 1:
{{Advert|date=October 2016}}
'''WAMP''' is a [[WebSocket]] subprotocol registered at [[Internet Assigned Numbers Authority|IANA]],<ref>[https://www.iana.org/assignments/websocket/websocket.xml IANA protocols listing page]</ref> specified<ref>[https://github.com/tavendo/WAMP/blob/master/spec/basic.md WAMP basic profile specifications]</ref> to offer routed [[Remote procedure call|RPC]] and [[Publish–subscribe pattern|PubSub]]. Its design goal<ref>{{cite web|url=
==Characteristics==
Line 9:
WAMP requires<ref>[http://crossbar.io/docs/Router-Transports/ Crossbar.io router transport ]</ref> a reliable, ordered, [[full-duplex]] message channel as a [[transport layer]], and by default uses Websocket. However, implementations can use other transports matching these characteristics and communicate with WAMP over e.g. raw sockets,<ref>{{cite web|url=https://github.com/tavendo/WAMP/issues/63|title=WAMP can run over Raw transports instead of WebSocket. Each message is prefixed with a uint32 (big endian) that provides the (serialized) length of the following WAMP message.}}</ref> [[Unix ___domain socket|Unix sockets]] or [[Push technology#Long polling|HTTP long poll]].
Message [[serialization]] assumes<ref>[https://github.com/tavendo/WAMP/blob/master/spec/basic.md#serializations WAMP serialization]</ref> integers, strings and ordered sequence types are available, and defaults to [[JSON]] as the most common format offering these. Implementations often provide [[MessagePack]] as a faster alternative to JSON, but at the cost of an additional dependency.<ref>{{cite web|url=https://ksdaemon.github.io/wampy.js/#description|title=Wampy default serializer is JSON, but it also supports msgpack as a serializer, but you need to include msgpack.js as dependency}}</ref>
To identify remote procedures and PubSub topics without conflicts, WAMP also needs an ID space allowing global assignment and resolution. Because the protocol is Web native - WebSocket being the preferred transport - [[Uniform resource identifier|URI]]s are used.
Line 28:
* '''publish''': a client publishes information about this topic.
This can have subtle variations depending
===Security===
Line 34:
As WAMP uses Websocket, connections can be wrapped in [[Transport Layer Security|TLS]] for encryption. Even when full [[confidentiality]] is not established, several mechanisms are implemented to isolate components and avoid [[man-in-the-middle attack]]s. Default implementations ensure that trying to register an already registered procedure will fail.
Routers can define realms as administrative domains, and clients must specify which realm they want to join upon connection. Once joined, the realm will act as a [[namespace]], preventing clients connected to a realm from using IDs defined in another for RPC and PubSub. Realms also have permissions attached
Some realms can only be joined by authenticated clients, using various authentication methods such as using [[X.509|TLS certificate]], [[HTTP cookie|cookies]] or a simple ticket.
Line 162:
|}
[[Tavendo]], the company from which originated the protocol, is also the author of [[Crossbar.io]], which promotes itself as the de facto router implementation.<ref>{{cite web|title=Crossbar.io is the name of the most full
==Use cases==
Line 174:
==Evolution==
WAMP is currently in version 2<ref>[
The version 2 of the specification is divided
==Comparison==
The WAMP website claims<ref>[
* '''Native PubSub''': supports Publish & Subscribe out of the box (no extension required).
* '''RPC''': supports Remote Procedure Calls out of the box (no extension required).
|