跳到主要内容

简介

aiosignalrSignalR 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 长度前缀的二进制)。
  • 完整客户端能力invokestream、即发即弃的 send、 客户端上传流、服务端方法处理器、心跳、服务端超时检测、可插拔重试策略的自动重连。
  • 完整服务端能力:hub 方法(单结果与流式)、分组、向全部/单连接/分组/用户广播、 客户端结果、调用取消、上传流参数、协商与握手协议选择。
  • 状态化重连:两端都实现 ASP.NET Core 的 useAck / Ack / Sequence 缓冲协议,传输断开时保留在途消息,不丢不重。
  • 灵活部署:独立 asyncio 服务器,或可挂载到 uvicorn / FastAPI 的 ASGI 应用。
  • 经参考实现验证:互操作测试套件让 aiosignalr 与真实 ASP.NET Core SignalR 服务器互通,也让真实 Microsoft.AspNetCore.SignalR.Client 与 aiosignalr 服务器互通。

能力矩阵

能力WebSocketServer-Sent EventsLong Polling
服务器 → 客户端
客户端 → 服务器✔(全双工)HTTP POSTHTTP POST
JSON 协议
MessagePack 协议
状态化重连

兼容性

aiosignalr 说标准的 SignalR 协议,可与以下对象互通:

  • ASP.NET Core 服务器(MapHub)与客户端(HubConnectionBuilder), 包括状态化重连。
  • @microsoft/signalr JavaScript 客户端。
  • 任何遵循 Transport ProtocolsHub Protocol 规范的 SignalR 实现。

环境要求

  • Python 3.11+。
  • aiohttpwebsocketsmsgpack(自动安装)。

下一步