Getting Started¶
This guide will help you get started with Autobahn|Python quickly.
Prerequisites¶
Python 3.9 or later
pip (Python package installer)
Quick Installation¶
# For asyncio
pip install autobahn
# For Twisted
pip install autobahn[twisted]
WebSocket Quick Start¶
Here’s a simple WebSocket echo server using asyncio:
import asyncio
from autobahn.asyncio.websocket import WebSocketServerProtocol, WebSocketServerFactory
class MyServerProtocol(WebSocketServerProtocol):
def onMessage(self, payload, isBinary):
# Echo back the message
self.sendMessage(payload, isBinary)
async def main():
factory = WebSocketServerFactory("ws://127.0.0.1:9000")
factory.protocol = MyServerProtocol
loop = asyncio.get_event_loop()
server = await loop.create_server(factory, '127.0.0.1', 9000)
print("WebSocket server running on ws://127.0.0.1:9000")
await server.serve_forever()
asyncio.run(main())
And a client to connect to it:
import asyncio
from autobahn.asyncio.websocket import WebSocketClientProtocol, WebSocketClientFactory
class MyClientProtocol(WebSocketClientProtocol):
def onOpen(self):
self.sendMessage(b"Hello, WebSocket!")
def onMessage(self, payload, isBinary):
print(f"Received: {payload.decode('utf8')}")
self.sendClose()
async def main():
factory = WebSocketClientFactory("ws://127.0.0.1:9000")
factory.protocol = MyClientProtocol
loop = asyncio.get_event_loop()
transport, protocol = await loop.create_connection(factory, '127.0.0.1', 9000)
asyncio.run(main())
WAMP Quick Start¶
Here’s a simple WAMP component that registers a procedure and subscribes to a topic:
from autobahn.asyncio.component import Component, run
component = Component(
transports="ws://127.0.0.1:8080/ws",
realm="realm1",
)
@component.register("com.example.add")
async def add(a, b):
return a + b
@component.subscribe("com.example.topic")
async def on_event(msg):
print(f"Received event: {msg}")
@component.on_join
async def joined(session, details):
print("Joined realm!")
# Call our own procedure
result = await session.call("com.example.add", 2, 3)
print(f"2 + 3 = {result}")
run([component])
Note
WAMP requires a router like Crossbar.io to be running. See the Crossbar.io documentation for setup instructions.
Using with Twisted¶
The same code works with Twisted by changing the imports:
# Instead of:
from autobahn.asyncio.websocket import WebSocketServerProtocol
# Use:
from autobahn.twisted.websocket import WebSocketServerProtocol
Next Steps¶
Installation - Detailed installation options
Programming Guide - Comprehensive programming guides
WebSocket Programming - WebSocket programming
WAMP Programming - WAMP programming