简介
aiosignalr 是 SignalR hub 协议的高性能 asyncio 原生 Python 实现。一个包同时提供客户端与 服务端,覆盖 WebSocket、Server-Sent Events、Long Polling 三种传输, 支持 JSON 与 MessagePack 两种消息编码。
SignalR 是众多 .NET 应用背后的实时通信框架。aiosignalr 让 Python 服务能说
同一套线上协议,从而可以与 ASP.NET Core 服务器与客户端、使用
@microsoft/signalr
的浏览器端以及其他任何 SignalR 实现互通。
为什么选择 aiosignalr
- 纯
asyncio—— 无阻塞调用,面向高并发事件驱动的 Python 服务。 - 客户端与服务端全双工,支持传输回退:客户端按服务器声明顺序协商传输 (WebSocket → Server-Sent Events → Long Polling)。
- 两种 hub 协议:JSON 协议(
0x1E分隔)与 MessagePack 协议 (VarInt 长度前缀的二进制)。 - 完整客 户端能力:
invoke、stream、即发即弃的send、 客户端上传流、服务端方法处理器、心跳、服务端超时检测、可插拔重试策略的自动重连。 - 完整服务端能力:hub 方法(单结果与流式)、分组、向全部/单连接/分组/用户广播、 客户端结果、调用取消、上传流参数、协商与握手协议选择。
- 状态化重连:两端都实现 ASP.NET Core 的
useAck/Ack/Sequence缓冲协议,传输断开时保留在途消息,不丢不重。 - 灵活部署:独立 asyncio 服务器,或可挂载到 uvicorn / FastAPI 的 ASGI 应用。
- 经参考实现验证:互操作测试套件让 aiosignalr 与真实 ASP.NET Core
SignalR 服务器互通,也让真实
Microsoft.AspNetCore.SignalR.Client与 aiosignalr 服务器互通。
能力矩阵
| 能力 | WebSocket | Server-Sent Events | Long Polling |
|---|---|---|---|
| 服务器 → 客户端 | ✔ | ✔ | ✔ |
| 客户端 → 服务器 | ✔(全双工) | HTTP POST | HTTP POST |
| JSON 协议 | ✔ | ✔ | ✔ |
| MessagePack 协议 | ✔ | ✘ | ✔ |
| 状态化重连 | ✔ | ✘ | ✘ |
兼容性
aiosignalr 说标准的 SignalR 协议,可与以下对象互通:
- ASP.NET Core 服务器(
MapHub)与客户端(HubConnectionBuilder), 包括状态化重连。 @microsoft/signalrJavaScript 客户端。- 任何遵循 Transport Protocols 与 Hub Protocol 规范的 SignalR 实现。
环境要求
- Python 3.11+。
aiohttp、websockets、msgpack(自动安装)。