跳转到主要内容

WebSocket协议(RFC 6455 & 7692)的实现

项目描述

websockets

licence version pyversions tests docs openssf

什么是 websockets

websockets 是一个用于在 Python 中构建 WebSocket 服务器和客户端的库,重点在于正确性、简洁性、健壮性和性能。

基于 Python 的标准异步 I/O 框架 asyncio 构建,默认实现提供了一个基于协程的优雅 API。

还提供了基于 threading 的实现和无 I/O 实现也可用。

文档可在 Read the Docs 上查看。

这是一个使用 asyncio API 的回声服务器示例

#!/usr/bin/env python

import asyncio
from websockets.server import serve

async def echo(websocket):
    async for message in websocket:
        await websocket.send(message)

async def main():
    async with serve(echo, "localhost", 8765):
        await asyncio.get_running_loop().create_future()  # run forever

asyncio.run(main())

以下是客户端如何使用 threading API 发送和接收消息的示例

#!/usr/bin/env python

from websockets.sync.client import connect

def hello():
    with connect("ws://#:8765") as websocket:
        websocket.send("Hello world!")
        message = websocket.recv()
        print(f"Received: {message}")

hello()

看起来怎么样?

开始教程吧!

为什么我应该使用 websockets

websockets 的发展受到四个原则的塑造

  1. 正确性websockets 严格测试以符合 RFC 6455。持续集成失败,分支覆盖率低于100%。

  2. 简洁性:您只需理解 msg = await ws.recv()await ws.send(msg) 即可。 websockets 负责管理连接,让您可以专注于应用程序。

  3. 鲁棒性websockets 为生产环境而构建。例如,在问题在 Python 社区广为人知之前,它是唯一一个 正确处理背压 的库。

  4. 性能:内存使用得到优化并可配置。C 扩展加速了昂贵的操作。它为 Linux、macOS 和 Windows 预编译,并以 wheel 格式打包在每个系统和 Python 版本中。

项目高度重视文档。请访问 Read the Docs 自行查看。

为什么不应该使用 websockets

  • 如果您更倾向于回调而非协程: websockets 是为了提供最佳的基于协程的 API 来管理 WebSocket 连接而创建的。请选择另一个库来实现基于回调的 API。

  • 如果您正在寻找一个混合 HTTP / WebSocket 库: websockets 致力于成为 RFC 6455:WebSocket 协议和 RFC 7692:WebSocket 压缩扩展的出色实现。其对 HTTP 的支持有限——仅足以进行 HTTP 健康检查。

    如果您想在同一个服务器中同时做这两件事,请查看基于 websockets 构建、以支持 WebSocket 连接的 HTTP 框架,如 Sanic

还有其他什么吗?

欢迎提交错误报告、补丁和建议!

要报告安全漏洞,请使用 Tidelift 安全联系方式。Tidelift 将协调修复和披露。

对于其他任何问题,请打开一个 问题 或发送一个 pull request

参与者必须遵守 贡献者行为准则

websocketsBSD 许可证 下发布。

项目详细信息


下载文件

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

源分发

websockets-13.1.tar.gz (158.5 kB 查看哈希值)

上传时间

构建分发

websockets-13.1-py3-none-any.whl (152.1 kB 查看哈希值)

上传时间 Python 3

websockets-13.1-pp310-pypy310_pp73-win_amd64.whl (159.2 kB 查看哈希值)

上传时间 PyPy Windows x86-64

websockets-13.1-pp310-pypy310_pp73-manylinux_2_17_aarch64.manylinux2014_aarch64.whl (157.1 kB 查看哈希值)

上传时间 PyPy manylinux: glibc 2.17+ ARM64

websockets-13.1-pp310-pypy310_pp73-manylinux_2_5_x86_64.manylinux1_x86_64.manylinux_2_17_x86_64.manylinux2014_x86_64.whl (156.7 kB 查看哈希值)

上传时间 PyPy manylinux: glibc 2.17+ x86-64 manylinux: glibc 2.5+ x86-64

websockets-13.1-pp310-pypy310_pp73-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl (156.7 kB 查看哈希值)

上传时间 PyPy manylinux: glibc 2.17+ i686 manylinux: glibc 2.5+ i686

websockets-13.1-pp310-pypy310_pp73-macosx_11_0_arm64.whl (155.7 kB 查看哈希值)

上传时间 PyPy macOS 11.0+ ARM64

websockets-13.1-pp310-pypy310_pp73-macosx_10_15_x86_64.whl (155.5 kB 查看哈希值)

上传时间 PyPy macOS 10.15+ x86-64

websockets-13.1-pp39-pypy39_pp73-win_amd64.whl (159.2 kB 查看哈希值)

上传于 PyPy Windows x86-64

websockets-13.1-pp39-pypy39_pp73-manylinux_2_17_aarch64.manylinux2014_aarch64.whl (157.1 kB 查看哈希值)

上传于 PyPy manylinux: glibc 2.17+ ARM64

websockets-13.1-pp39-pypy39_pp73-manylinux_2_5_x86_64.manylinux1_x86_64.manylinux_2_17_x86_64.manylinux2014_x86_64.whl (156.6 kB 查看哈希值)

上传于 PyPy manylinux: glibc 2.17+ x86-64 manylinux: glibc 2.5+ x86-64

websockets-13.1-pp39-pypy39_pp73-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl (156.7 kB 查看哈希值)

上传于 PyPy manylinux: glibc 2.17+ i686 manylinux: glibc 2.5+ i686

websockets-13.1-pp39-pypy39_pp73-macosx_11_0_arm64.whl (155.7 kB 查看哈希值)

上传于 PyPy macOS 11.0+ ARM64

websockets-13.1-pp39-pypy39_pp73-macosx_10_15_x86_64.whl (155.5 kB 查看哈希值)

上传于 PyPy macOS 10.15+ x86-64

websockets-13.1-pp38-pypy38_pp73-win_amd64.whl (159.2 kB 查看哈希值)

上传于 PyPy Windows x86-64

websockets-13.1-pp38-pypy38_pp73-manylinux_2_17_aarch64.manylinux2014_aarch64.whl (157.1 kB 查看哈希值)

上传于 PyPy manylinux: glibc 2.17+ ARM64

websockets-13.1-pp38-pypy38_pp73-manylinux_2_5_x86_64.manylinux1_x86_64.manylinux_2_17_x86_64.manylinux2014_x86_64.whl (156.6 kB 查看哈希值)

上传于 PyPy manylinux: glibc 2.17+ x86-64 manylinux: glibc 2.5+ x86-64

websockets-13.1-pp38-pypy38_pp73-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl (156.7 kB 查看哈希值)

上传于 PyPy manylinux: glibc 2.17+ i686 manylinux: glibc 2.5+ i686

websockets-13.1-pp38-pypy38_pp73-macosx_11_0_arm64.whl (155.7 kB 查看哈希值)

上传时间: PyPy macOS 11.0+ ARM64

websockets-13.1-pp38-pypy38_pp73-macosx_10_9_x86_64.whl (155.4 kB 查看哈希值)

上传时间: PyPy macOS 10.9+ x86-64

websockets-13.1-cp313-cp313-win_amd64.whl (159.1 kB 查看哈希值)

上传时间: CPython 3.13 Windows x86-64

websockets-13.1-cp313-cp313-win32.whl (158.7 kB 查看哈希值)

上传时间: CPython 3.13 Windows x86

websockets-13.1-cp313-cp313-musllinux_1_2_x86_64.whl (164.7 kB 查看哈希值)

上传时间: CPython 3.13 musllinux: musl 1.2+ x86-64

websockets-13.1-cp313-cp313-musllinux_1_2_i686.whl (164.7 kB 查看哈希值)

上传时间: CPython 3.13 musllinux: musl 1.2+ i686

websockets-13.1-cp313-cp313-musllinux_1_2_aarch64.whl (165.4 kB 查看哈希值)

上传时间: CPython 3.13 musllinux: musl 1.2+ ARM64

websockets-13.1-cp313-cp313-manylinux_2_17_aarch64.manylinux2014_aarch64.whl (165.6 kB 查看哈希值)

上传时间: CPython 3.13 manylinux: glibc 2.17+ ARM64

websockets-13.1-cp313-cp313-manylinux_2_5_x86_64.manylinux1_x86_64.manylinux_2_17_x86_64.manylinux2014_x86_64.whl (165.0 kB 查看哈希值)

上传时间: CPython 3.13 manylinux: glibc 2.17+ x86-64 manylinux: glibc 2.5+ x86-64

websockets-13.1-cp313-cp313-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl (164.6 kB 查看哈希值)

上传时间: CPython 3.13 manylinux: glibc 2.17+ i686 manylinux: glibc 2.5+ i686

websockets-13.1-cp313-cp313-macosx_11_0_arm64.whl (155.7 kB 查看哈希值)

上传于 CPython 3.13 macOS 11.0+ ARM64

websockets-13.1-cp313-cp313-macosx_10_13_x86_64.whl (155.5 kB 查看哈希值)

上传于 CPython 3.13 macOS 10.13+ x86-64

websockets-13.1-cp313-cp313-macosx_10_13_universal2.whl (157.8 kB 查看哈希值)

上传于 CPython 3.13 macOS 10.13+ universal2 (ARM64, x86-64)

websockets-13.1-cp312-cp312-win_amd64.whl (159.1 kB 查看哈希值)

上传于 CPython 3.12 Windows x86-64

websockets-13.1-cp312-cp312-win32.whl (158.7 kB 查看哈希值)

上传于 CPython 3.12 Windows x86

websockets-13.1-cp312-cp312-musllinux_1_2_x86_64.whl (164.7 kB 查看哈希值)

上传于 CPython 3.12 musllinux: musl 1.2+ x86-64

websockets-13.1-cp312-cp312-musllinux_1_2_i686.whl (164.7 kB 查看哈希值)

上传于 CPython 3.12 musllinux: musl 1.2+ i686

websockets-13.1-cp312-cp312-musllinux_1_2_aarch64.whl (165.3 kB 查看哈希值)

上传于 CPython 3.12 musllinux: musl 1.2+ ARM64

websockets-13.1-cp312-cp312-manylinux_2_17_aarch64.manylinux2014_aarch64.whl (165.6 kB 查看哈希值)

上传于 CPython 3.12 manylinux: glibc 2.17+ ARM64

websockets-13.1-cp312-cp312-manylinux_2_5_x86_64.manylinux1_x86_64.manylinux_2_17_x86_64.manylinux2014_x86_64.whl (165.0 kB 查看哈希值)

上传于 CPython 3.12 manylinux: glibc 2.17+ x86-64 manylinux: glibc 2.5+ x86-64

websockets-13.1-cp312-cp312-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl (164.6 kB 查看哈希值)

上传于 CPython 3.12 manylinux: glibc 2.17+ i686 manylinux: glibc 2.5+ i686

websockets-13.1-cp312-cp312-macosx_11_0_arm64.whl (155.7 kB 查看哈希值)

上传于 CPython 3.12 macOS 11.0+ ARM64

websockets-13.1-cp312-cp312-macosx_10_9_x86_64.whl (155.5 kB 查看哈希值)

上传于 CPython 3.12 macOS 10.9+ x86-64

websockets-13.1-cp312-cp312-macosx_10_9_universal2.whl (157.8 kB 查看哈希值)

上传于 CPython 3.12 macOS 10.9+ universal2 (ARM64, x86-64)

websockets-13.1-cp311-cp311-win_amd64.whl (159.1 kB 查看哈希值)

上传于 CPython 3.11 Windows x86-64

websockets-13.1-cp311-cp311-win32.whl (158.7 kB 查看哈希值)

上传于 CPython 3.11 Windows x86

websockets-13.1-cp311-cp311-musllinux_1_2_x86_64.whl (164.4 kB 查看哈希值)

上传于 CPython 3.11 musllinux: musl 1.2+ x86-64

websockets-13.1-cp311-cp311-musllinux_1_2_i686.whl (164.5 kB 查看哈希值)

上传于 CPython 3.11 musllinux: musl 1.2+ i686

websockets-13.1-cp311-cp311-musllinux_1_2_aarch64.whl (165.1 kB 查看哈希值)

上传于 CPython 3.11 musllinux: musl 1.2+ ARM64

websockets-13.1-cp311-cp311-manylinux_2_17_aarch64.manylinux2014_aarch64.whl (165.4 kB 查看哈希值)

上传于 CPython 3.11 manylinux: glibc 2.17+ ARM64

websockets-13.1-cp311-cp311-manylinux_2_5_x86_64.manylinux1_x86_64.manylinux_2_17_x86_64.manylinux2014_x86_64.whl (164.8 kB 查看哈希值)

上传于 CPython 3.11 manylinux: glibc 2.17+ x86-64 manylinux: glibc 2.5+ x86-64

websockets-13.1-cp311-cp311-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl (164.4 kB 查看哈希值)

上传于 CPython 3.11 manylinux: glibc 2.17+ i686 manylinux: glibc 2.5+ i686

websockets-13.1-cp311-cp311-macosx_11_0_arm64.whl (155.7 kB 查看哈希值)

上传于 CPython 3.11 macOS 11.0+ ARM64

websockets-13.1-cp311-cp311-macosx_10_9_x86_64.whl (155.5 kB 查看哈希值)

上传于 CPython 3.11 macOS 10.9+ x86-64

websockets-13.1-cp311-cp311-macosx_10_9_universal2.whl (157.8 kB 查看哈希值)

上传于 CPython 3.11 macOS 10.9+ universal2 (ARM64, x86-64)

websockets-13.1-cp310-cp310-win_amd64.whl (159.1 kB 查看哈希值)

上传于 CPython 3.10 Windows x86-64

websockets-13.1-cp310-cp310-win32.whl (158.7 kB 查看哈希值)

上传于 CPython 3.10 Windows x86

websockets-13.1-cp310-cp310-musllinux_1_2_x86_64.whl (163.9 kB 查看哈希值)

上传于 CPython 3.10 musllinux: musl 1.2+ x86-64

websockets-13.1-cp310-cp310-musllinux_1_2_i686.whl (163.9 kB 查看哈希值)

上传于 CPython 3.10 musllinux: musl 1.2+ i686

websockets-13.1-cp310-cp310-musllinux_1_2_aarch64.whl (164.5 kB 查看哈希值)

上传于 CPython 3.10 musllinux: musl 1.2+ ARM64

websockets-13.1-cp310-cp310-manylinux_2_17_aarch64.manylinux2014_aarch64.whl (164.8 kB 查看哈希值)

上传于 CPython 3.10 manylinux: glibc 2.17+ ARM64

websockets-13.1-cp310-cp310-manylinux_2_5_x86_64.manylinux1_x86_64.manylinux_2_17_x86_64.manylinux2014_x86_64.whl (164.1 kB 查看哈希值)

上传时间: CPython 3.10 manylinux: glibc 2.17+ x86-64 manylinux: glibc 2.5+ x86-64

websockets-13.1-cp310-cp310-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl (163.8 kB 查看哈希值)

上传时间: CPython 3.10 manylinux: glibc 2.17+ i686 manylinux: glibc 2.5+ i686

websockets-13.1-cp310-cp310-macosx_11_0_arm64.whl (155.7 kB 查看哈希值)

上传时间: CPython 3.10 macOS 11.0+ ARM64

websockets-13.1-cp310-cp310-macosx_10_9_x86_64.whl (155.5 kB 查看哈希值)

上传时间: CPython 3.10 macOS 10.9+ x86-64

websockets-13.1-cp310-cp310-macosx_10_9_universal2.whl (157.8 kB 查看哈希值)

上传时间: CPython 3.10 macOS 10.9+ universal2 (ARM64, x86-64)

websockets-13.1-cp39-cp39-win_amd64.whl (159.1 kB 查看哈希值)

上传时间: CPython 3.9 Windows x86-64

websockets-13.1-cp39-cp39-win32.whl (158.7 kB 查看哈希值)

上传时间: CPython 3.9 Windows x86

websockets-13.1-cp39-cp39-musllinux_1_2_x86_64.whl (163.7 kB 查看哈希值)

上传时间: CPython 3.9 musllinux: musl 1.2+ x86-64

websockets-13.1-cp39-cp39-musllinux_1_2_i686.whl (163.7 kB 查看哈希值)

上传时间: CPython 3.9 musllinux: musl 1.2+ i686

websockets-13.1-cp39-cp39-musllinux_1_2_aarch64.whl (164.3 kB 查看哈希值)

上传时间: CPython 3.9 musllinux: musl 1.2+ ARM64

websockets-13.1-cp39-cp39-manylinux_2_17_aarch64.manylinux2014_aarch64.whl (164.6 kB 查看哈希值)

上传时间: CPython 3.9 manylinux: glibc 2.17+ ARM64

websockets-13.1-cp39-cp39-manylinux_2_5_x86_64.manylinux1_x86_64.manylinux_2_17_x86_64.manylinux2014_x86_64.whl (163.9 kB 查看哈希值)

上传时间: CPython 3.9 manylinux: glibc 2.17+ x86-64 manylinux: glibc 2.5+ x86-64

websockets-13.1-cp39-cp39-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl (163.6 kB 查看哈希值)

上传时间: CPython 3.9 manylinux: glibc 2.17+ i686 manylinux: glibc 2.5+ i686

websockets-13.1-cp39-cp39-macosx_11_0_arm64.whl (155.7 kB 查看哈希值)

上传时间: CPython 3.9 macOS 11.0+ ARM64

websockets-13.1-cp39-cp39-macosx_10_9_x86_64.whl (155.5 kB 查看哈希值)

上传时间: CPython 3.9 macOS 10.9+ x86-64

websockets-13.1-cp39-cp39-macosx_10_9_universal2.whl (157.8 kB 查看哈希值)

上传时间: CPython 3.9 macOS 10.9+ universal2 (ARM64, x86-64)

websockets-13.1-cp38-cp38-win_amd64.whl (159.1 kB 查看哈希值)

上传时间: CPython 3.8 Windows x86-64

websockets-13.1-cp38-cp38-win32.whl (158.7 kB 查看哈希值)

上传时间: CPython 3.8 Windows x86

websockets-13.1-cp38-cp38-musllinux_1_2_x86_64.whl (163.6 kB 查看哈希值)

上传时间: CPython 3.8 musllinux: musl 1.2+ x86-64

websockets-13.1-cp38-cp38-musllinux_1_2_i686.whl (163.6 kB 查看哈希值)

上传时间: CPython 3.8 musllinux: musl 1.2+ i686

websockets-13.1-cp38-cp38-musllinux_1_2_aarch64.whl (164.2 kB 查看哈希值)

上传于 CPython 3.8 musllinux: musl 1.2+ ARM64

websockets-13.1-cp38-cp38-manylinux_2_17_aarch64.manylinux2014_aarch64.whl (165.0 kB 查看哈希值)

上传于 CPython 3.8 manylinux: glibc 2.17+ ARM64

websockets-13.1-cp38-cp38-manylinux_2_5_x86_64.manylinux1_x86_64.manylinux_2_17_x86_64.manylinux2014_x86_64.whl (164.3 kB 查看哈希值)

上传于 CPython 3.8 manylinux: glibc 2.17+ x86-64 manylinux: glibc 2.5+ x86-64

websockets-13.1-cp38-cp38-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl (164.1 kB 查看哈希值)

上传于 CPython 3.8 manylinux: glibc 2.17+ i686 manylinux: glibc 2.5+ i686

websockets-13.1-cp38-cp38-macosx_11_0_arm64.whl (155.7 kB 查看哈希值)

上传于 CPython 3.8 macOS 11.0+ ARM64

websockets-13.1-cp38-cp38-macosx_10_9_x86_64.whl (155.5 kB 查看哈希值)

上传于 CPython 3.8 macOS 10.9+ x86-64

websockets-13.1-cp38-cp38-macosx_10_9_universal2.whl (157.8 kB 查看哈希值)

上传于 CPython 3.8 macOS 10.9+ universal2 (ARM64, x86-64)

由以下支持