freshcrate
Home > Developer Tools > trio-websocket

trio-websocket

WebSocket library for Trio

Description

# Trio WebSocket This library implements both server and client aspects of the [the WebSocket protocol](https://tools.ietf.org/html/rfc6455), striving for safety, correctness, and ergonomics. It is based on the [wsproto project](https://wsproto.readthedocs.io/en/latest/), which is a [Sans-IO](https://sans-io.readthedocs.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](https://trio.readthedocs.io/en/latest/). This library passes the [Autobahn Test Suite](https://github.com/crossbario/autobahn-testsuite). This README contains a brief introduction to the project. Full documentation [is available here](https://trio-websocket.readthedocs.io). [![PyPI](https://img.shields.io/pypi/v/trio-websocket.svg?style=flat-square)](https://pypi.org/project/trio-websocket/) ![Python Versions](https://img.shields.io/pypi/pyversions/trio-websocket.svg?style=flat-square) [![Build Status](https://img.shields.io/github/actions/workflow/status/python-trio/trio-websocket/ci.yml)](https://github.com/python-trio/trio-websocket/actions/workflows/ci.yml) [![Read the Docs](https://img.shields.io/readthedocs/trio-websocket.svg)](https://trio-websocket.readthedocs.io) [![Join chatroom](https://img.shields.io/badge/chat-join%20now-blue.svg)](https://gitter.im/python-trio/general) ## Status **This project is on life-support maintenance.** If you're interested in helping to maintain and contribute, please reach out on [Gitter](https://gitter.im/python-trio/general) or contribute in issues and pull requests. ## Alternatives If you happen to only need a server, using Quart via the [quart-trio](https://github.com/pgjones/quart-trio) extension may suffice. While trio-websocket is more flexible, Quart covers both HTTP and WebSocket within a single framework, and serving both from the same port is straightforward. There has yet to be a performance comparison. ## Installation This library requires Python 3.8 or greater. To install from PyPI: pip install trio-websocket ## Client Example This example demonstrates how to open a WebSocket URL: ```python 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. ```python 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.

Release History

VersionChangesUrgencyDate
0.12.2Imported from PyPI (0.12.2)Low4/21/2026
0.12.1Tag 0.12.1Low2/17/2025
0.12.0Tag 0.12.0Low2/17/2025
0.11.1Tag 0.11.1Low9/26/2023
0.10.4Tag 0.10.4Low9/6/2023
0.10.3Tag 0.10.3Low6/8/2023
0.10.2Tag 0.10.2Low3/19/2023
0.10.1Tag 0.10.1Low3/18/2023
0.10.0Tag 0.10.0Low3/13/2023
0.9.2Tag 0.9.2Low2/5/2021
0.9.1Tag 0.9.1Low12/6/2020
0.9.0Tag 0.9.0Low11/25/2020
0.8.1Tag 0.8.1Low9/22/2020
0.8.0Tag 0.8.0Low6/21/2019
0.7.0Tag 0.7.0Low5/20/2019
0.6.0Tag 0.6.0Low2/12/2019
0.5.0Tag 0.5.0Low1/15/2019
0.4.0Tag 0.4.0Low11/21/2018
0.3.0Tag 0.3.0Low10/29/2018
0.2.0Tag 0.2.0Low10/17/2018

Dependencies & License Audit

Loading dependencies...

Similar Packages

tritonclientPython client library and utilities for communicating with Triton Inference Server2.67.0
modalPython client library for Modal1.4.2
azure-coreMicrosoft Azure Core Library for Pythonazure-template_0.1.0b6187637
azure-mgmt-coreMicrosoft Azure Management Core Library for Pythonazure-template_0.1.0b6187637
azure-monitor-opentelemetry-exporterMicrosoft Azure Monitor Opentelemetry Exporter Client Library for Pythonazure-template_0.1.0b6187637