Hypercorn:支持 HTTP/3 的 Python ASGI 服务器

Python 异步生态里,ASGI 服务器的选择不算少,Uvicorn、Daphne 都是常见选项。Hypercorn 是一个相对低调但功能扎实的选手,目前收获了 1,581 个 Star。它的定位很明确:一个同时支持 ASGI 和 WSGI 的 Web 服务器,而且原生支持 HTTP/2 和 WebSockets。

正文顶部截图

它解决了什么问题

如果你用过 Gunicorn,对 Hypercorn 的设计理念会比较熟悉。它本身就是受 Gunicorn 启发开发的,核心思路是把一个成熟的 WSGI 服务器模式搬到 ASGI 世界里。

Hypercorn 的底层基于 sans-io 架构,用了 h11、h2、wsproto 这些成熟的协议库来处理 HTTP/1、HTTP/2 和 WebSocket。这种设计的好处是协议逻辑和网络 I/O 解耦,代码更干净,也更容易测试。

对普通开发者来说,最直接的收益是:你可以用一个服务器同时跑 ASGI 和 WSGI 应用,不用为了兼容旧项目再配一套环境。

几个值得关注的特性

1. HTTP/3 支持

这是 Hypercorn 比较少见的能力。通过集成 aioquic 库,它可以 serve HTTP/3 协议的流量。装个依赖包、加一行参数就能启用:

pip install hypercorn[h3]
hypercorn --quic-bind localhost:4433 module:app

HTTP/3 基于 QUIC,在弱网环境和移动端表现更好。如果你在做对延迟敏感的项目,这个特性值得留意。

2. 多种异步后端

Hypercorn 不只支持 asyncio,还兼容 uvloop 和 trio。trio 的结构化并发模型在某些场景下比 asyncio 更容易写出正确的代码,这方面的支持让开发者多了一种选择。

3. 双协议兼容

ASGI 和 WSGI 同时支持,意味着你不需要为了跑一个 Flask 应用再单独起个服务器。迁移项目或者混用框架时,这个特性能省不少事。

用起来怎么样

安装和启动都很直接:

pip install hypercorn
hypercorn module:app

也可以在代码里直接调用:

import asyncio
from hypercorn.config import Config
from hypercorn.asyncio import serve

from module import app

asyncio.run(serve(app, Config()))

README区域截图

文档覆盖比较全,从 API 用法到配置项都有说明。项目最初是从 Quart 框架里拆分出来的独立服务器,到现在已经发展成一个成熟的项目。

适合什么场景

如果你只需要一个简单的 ASGI 服务器跑 FastAPI 或 Django,Uvicorn 可能更轻量。但如果你有以下需求,Hypercorn 会是更好的选择:

  • 需要 HTTP/2 或 HTTP/3 支持
  • 项目同时涉及 ASGI 和 WSGI
  • 想用 trio 替代 asyncio
  • 需要 WebSocket over HTTP/2

总结

Hypercorn 不是那种追求配置极简的服务器,它的优势在于功能全面和协议支持前沿。1,581 个 Star 在 Python Web 服务器里不算突出,但代码质量和文档完整度都在线。如果你的项目对协议支持有较高要求,或者需要一个能覆盖多种场景的统一服务器,它值得加入技术选型清单。

务器里不算突出,但代码质量和文档完整度都在线。如果你的项目对协议支持有较高要求,或者需要一个能覆盖多种场景的统一服务器,它值得加入技术选型清单。

更多推荐