跳转到主要内容

Trio的WebSocket库

项目描述

Trio WebSocket

本库实现了WebSocket协议的服务端和客户端部分,力求安全、正确和易用。它基于wsproto项目,该项目是一个Sans-IO状态机,实现了WebSocket协议的大部分功能,包括帧、编解码器和事件。此库使用Trio框架进行I/O处理。此库通过了Autobahn测试套件

本README包含对项目的简要介绍。完整文档在这里提供。

PyPI Python Versions Build Status Read the Docs

替代方案

如果您只需要服务器端,可以使用通过quart-trio扩展的Quart。虽然trio-websocket更加灵活,但Quart在单个框架内覆盖HTTP和WebSocket,并且从同一端口提供服务非常简单。尚未进行性能比较。

安装

此库需要Python 3.7或更高版本。要从PyPI安装

pip install trio-websocket

客户端示例

此示例演示了如何打开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)

WebSocket上下文管理器在进入块之前自动连接,在退出块之前自动断开连接。完整的API提供了很多灵活性和额外选项。

服务器示例

WebSocket服务器需要绑定地址、端口号和处理传入连接的协程。此示例演示了一个“回显服务器”,它将每个传入的消息以相同的传出消息回复。

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)

服务器的处理程序echo_server(…)接收一个连接请求对象。可以使用此对象检查客户端请求并修改握手,然后可以将其交换为实际的WebSocket对象ws。再次强调,完整的API提供了很多灵活性和额外选项。

项目详情


下载文件

下载适用于您的平台的文件。如果您不确定选择哪个,请了解有关安装包的更多信息。

源代码分发

trio-websocket-0.11.1.tar.gz (26.5 kB 查看哈希值)

上传时间 源代码

构建分发

trio_websocket-0.11.1-py3-none-any.whl (17.4 kB 查看哈希值)

上传时间 Python 3

由...