Package: autobahn
WebSocket & WAMP for Python on Twisted and asyncio.Quick Links:Source Code-Documentation-WebSocket Examples-WAMP ExamplesCommunity:Forum-StackOverflow-Twitter-IRC #autobahn/chat.freenode.netCompanion Projects:Autobahn|JS-Autobahn|Cpp-Autobahn|Testsuite-Crossbar.io-WAMPIntroductionAutobahn|Pythonis a subproject ofAutobahnand provides open-source
implementations ofThe WebSocket ProtocolThe Web Application Messaging Protocol (WAMP)for Python 3.7+ and running onTwistedandasyncio.You can useAutobahn|Pythonto create clients and servers in Python speaking just plain WebSocket or WAMP.WebSocketallowsbidirectional real-time messaging on the Weband beyond, whileWAMPadds real-time application communication on top of WebSocket.WAMPprovides asynchronousRemote Procedure CallsandPublish & Subscribefor applications inoneprotocol running overWebSocket. WAMP is aroutedprotocol, so you need aWAMP Routerto connect yourAutobahn|Pythonbased clients. We provideCrossbar.io, but there areother optionsas well.NoteAutobahn|Pythonup to version v19.11.2 supported Python 2 and 3.4+,
and up to version v20.7.1 supported Python 3.5+,
and up to version v21.2.1 supported Python 3.6+.Featuresframework forWebSocketandWAMPclients and serversruns onCPythonandPyPy <https://pypy.org/>runs underTwistedandasyncio- implements WebSocketRFC6455and Draft Hybi-10+implementsWebSocket compressionimplementsWAMP, the Web Application Messaging Protocolhigh-performance, fully asynchronous implementationbest-in-class standards conformance (100% strict passes withAutobahn Testsuite:ClientServer)message-, frame- and streaming-APIs for WebSocketsupports TLS (secure WebSocket) and proxiesOpen-source (MIT license)Show me some codeTo give you a first impression, here are two examples. We have lot morein the repo.WebSocket Echo ServerHere is a simple WebSocket Echo Server that will echo back any WebSocket
message received:fromautobahn.twisted.websocketimportWebSocketServerProtocol# or: from autobahn.asyncio.websocket import WebSocketServerProtocolclassMyServerProtocol(WebSocketServerProtocol):defonConnect(self,request):print("Client connecting:{}".format(request.peer))defonOpen(self):print("WebSocket connection open.")defonMessage(self,payload,isBinary):ifisBinary:print("Binary message received:{}bytes".format(len(payload)))else:print("Text message received:{}".format(payload.decode('utf8')))# echo back message verbatimself.sendMessage(payload,isBinary)defonClose(self,wasClean,code,reason):print("WebSocket connection closed:{}".format(reason))To actually run above server protocol, you need some lines ofboilerplate.WAMP Application ComponentHere is a WAMP Application Component that performs all four types of
actions that WAMP provides:subscribeto a topicpublishan eventregistera procedurecalla procedurefromautobahn.twisted.wampimportApplicationSession# or: from autobahn.asyncio.wamp import ApplicationSessionclassMyComponent(ApplicationSession):@inlineCallbacksdefonJoin(self,details):# 1. subscribe to a topic so we receive eventsdefonevent(msg):print("Got event:{}".format(msg))yieldself.subscribe(onevent,'com.myapp.hello')# 2. publish an event to a topicself.publish('com.myapp.hello','Hello, world!')# 3. register a procedure for remote callingdefadd2(x,y):returnx+yself.register(add2,'com.myapp.add2')# 4. call a remote procedureres=yieldself.call('com.myapp.add2',2,3)print("Got result:{}".format(res))Above code will work on Twisted and asyncio by changing a single line
(the base class ofMyComponent). To actually run above application component, you need some lines ofboilerplateand aWAMP Router.ExtensionsNetworking frameworkAutobahn runs on both Twisted and asyncio. To select the respective netoworking framework, install flavor:asyncio: Install asyncio (when on Python 2, otherwise it’s included in the standard library already) and asyncio support in Autobahntwisted: Install Twisted and Twisted support in AutobahnWebSocket acceleration and compressionaccelerate: Install WebSocket acceleration -Only use on CPython - not on PyPy (which is faster natively)compress: Install (non-standard) WebSocket compressorsbzip2andsnappy(standarddeflatebased WebSocket compression is already included in the base install)Encryption and WAMP authenticationAutobahn supports running over TLS (for WebSocket and all WAMP transports) as well asWAMP-cryposignauthentication.To install use this flavor:encryption: Installs TLS and WAMP-cryptosign dependenciesAutobahn also supportsWAMP-SCRAMauthentication. To install:scram: Installs WAMP-SCRAM dependenciesXBRAutobahn includes support forXBR. To install use this flavor:xbr:To install:pip install autobahn[xbr]or (Twisted, with more bells an whistles)pip install autobahn[twisted,encryption,serialization,xbr]or (asyncio, with more bells an whistles)pip install autobahn[asyncio,encryption,serialization,xbr]Native vector extensions (NVX)> This is NOT yet complete - ALPHA!Autobahn containsNVX, a network accelerator library that provides SIMD accelerated native vector code for WebSocket (XOR masking) and UTF-8 validation.WAMP Serializersserialization: To install additional WAMP serializers: CBOR, MessagePack, UBJSON and FlatbuffersAbove is for advanced uses. In general we recommend to use CBOR where you can,
and JSON (from the standard library) otherwise.To install Autobahn with all available serializers:pip install autobahn[serializers]or (development install)pip install -e .[serializers]Further, to speed up JSON on CPython usingujson, set the environment variable:AUTOBAHN_USE_UJSON=1WarningUsingujson(on both CPython and PyPy) will break the ability of Autobahn
to transport and translate binary application payloads in WAMP transparently.
This ability depends on features of the regular JSON standard library module
not available onujson.