websockets
?websockets 是一个用 Python 构建 WebSocket 服务器和客户端的库,重点关注正确性、简单性、稳健性和性能。
默认实现建立在asyncio
(Python 的标准异步 I/O 框架)之上,提供了一个优雅的基于协程的 API。
还可以使用基于threading
的实现和 Sans-I/O 实现。
文档可在阅读文档中找到。
这是一个带有asyncio
API 的 echo 服务器:
#!/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://localhost:8765" ) as websocket :
websocket . send ( "Hello world!" )
message = websocket . recv ()
print ( f"Received: { message } " )
hello ()
看起来不错吗?
开始使用教程!
作为 Tidelift 订阅的一部分提供
websockets 和数千个其他软件包的维护者正在与 Tidelift 合作,为您用于构建应用程序的开源依赖项提供商业支持和维护。节省时间、降低风险并改善代码运行状况,同时向您使用的确切依赖项的维护者付费。了解更多。
(如果您为websockets
做出贡献并希望成为官方支持提供商,请告诉我。)
websockets
? websockets
的开发遵循四个原则:
websockets
经过严格测试,符合 RFC 6455。持续集成在 100% 分支覆盖率下失败。msg = await ws.recv()
和await ws.send(msg)
。 websockets
负责管理连接,以便您可以专注于您的应用程序。websockets
是为生产而构建的。例如,在该问题在 Python 社区中广为人知之前,它是唯一能够正确处理背压的库。文档是项目中首要关注的问题。请阅读文档并亲自查看。
websockets
?如果您更喜欢回调而不是协程:创建websockets
是为了提供最好的基于协程的 API 来管理 Python 中的 WebSocket 连接。为基于回调的 API 选择另一个库。
如果您正在寻找混合的 HTTP / WebSocket 库: websockets
旨在成为 RFC 6455:WebSocket 协议和 RFC 7692:WebSocket 压缩扩展的出色实现。它对 HTTP 的支持很少——仅足以进行 HTTP 运行状况检查。
如果您想在同一服务器中执行这两项操作,请查看构建在websockets
之上以支持 WebSocket 连接的 HTTP 框架,例如 Sanic。
欢迎错误报告、补丁和建议!
要报告安全漏洞,请使用 Tidelift 安全联系人。 Tidelift 将协调修复和披露。
对于其他任何问题,请提出问题或发送拉取请求。
参与者必须遵守贡献者契约行为准则。
websockets
是在 BSD 许可证下发布的。