WebSocket library for Trio
Project description
Trio WebSocket
This library implements the WebSocket protocol, striving for safety, correctness, and ergonomics. It is based on the wsproto project, which is a Sans-IO state machine that implements the majority of the WebSocket protocol, including framing, codecs, and events. This library handles I/O using the Trio framework. This library passes the Autobahn Test Suite.
This README contains a brief introduction to the project. Full documentation is available here.
Installation
This library requires Python 3.5 or greater. To install from PyPI:
pip install trio-websocket
Client Example
This example demonstrates how to open a WebSocket URL:
import trio
from sys import stderr
from trio_websocket import open_websocket_url
async def main():
try:
async with open_websocket_url('wss://echo.websocket.org') as ws:
await ws.send_message('hello world!')
message = await ws.get_message()
print('Received message: %s' % message)
except OSError as ose:
print('Connection attempt failed: %s' % ose, file=stderr)
trio.run(main)
The WebSocket context manager connects automatically before entering the block and disconnects automatically before exiting the block. The full API offers a lot of flexibility and additional options.
Server Example
A WebSocket server requires a bind address, a port, and a coroutine to handle incoming connections. This example demonstrates an "echo server" that replies to each incoming message with an identical outgoing message.
import trio
from trio_websocket import serve_websocket, ConnectionClosed
async def echo_server(request):
ws = await request.accept()
while True:
try:
message = await ws.get_message()
await ws.send_message(message)
except ConnectionClosed:
break
async def main():
await serve_websocket(echo_server, '127.0.0.1', 8000, ssl_context=None)
trio.run(main)
The server's handler echo_server(…)
receives a connection request object.
This object can be used to inspect the client's request and modify the
handshake, then it can be exchanged for an actual WebSocket object ws
.
Again, the full API offers a lot of flexibility and additional options.
Project details
Release history Release notifications | RSS feed
Download files
Download the file for your platform. If you're not sure which to choose, learn more about installing packages.
Source Distribution
Built Distribution
Hashes for lager-trio-websocket-0.9.0.dev0.tar.gz
Algorithm | Hash digest | |
---|---|---|
SHA256 | 04ce6a3277bf0f499a9190ef4b24c551aff6ebac92163cd949e254aab49f2c9a |
|
MD5 | 58973b48d35f22c01a48a2e6663af6a3 |
|
BLAKE2b-256 | e73446616619a7f45043800fedcd37ce45f6f28203006f703f3c9192beaca1ba |
Hashes for lager_trio_websocket-0.9.0.dev0-py3-none-any.whl
Algorithm | Hash digest | |
---|---|---|
SHA256 | 2f83e9bab9e01d8cf54aab60902a696e55ca55eaa69fc8560810203f5d8f6e58 |
|
MD5 | 11c15de001f829243a9ff78701bf11c3 |
|
BLAKE2b-256 | 27753ab0bd84e0043ab73dc2b8fb9f39ab31799b01adf315b240ff9be7478482 |