简洁一句话解释:
ASGI(Asynchronous Server Gateway Interface) 是 Python Web 服务的一种标准接口协议,它支持异步和高并发,是 WSGI 的升级版。
而所谓的 “ASGI 服务器”(比如 uvicorn
、daphne
)就是用来运行遵循 ASGI 标准的 Python Web 应用的服务程序。
类比解释:你可以把它们想成“插头 + 插座标准”
- 你的 Web 应用(FastAPI 等) = 插头
- ASGI 协议 = 插头和插座之间的标准(通信规则)
- uvicorn = 插座(让你的程序对外提供 HTTP 服务)
只要你的“插头”是符合 ASGI 标准的,uvicorn
就能让它跑起来,接受请求、返回响应。
那 WSGI 又是什么?
在 ASGI 出现之前,Python Web 服务用的是:
WSGI(Web Server Gateway Interface)
常见的 WSGI 框架:
- Flask
- Django(默认)
常见的 WSGI 服务器:
gunicorn
uwsgi
WSGI 的问题:
- 它是 同步的(阻塞):不能很好地支持 WebSocket、长轮询、异步请求。
所以如果你要搞:
- 实时聊天、WebSocket
- 高并发异步任务
- 快速的异步 I/O(比如并发 HTTP 请求)
就必须用 ASGI。
✅ ASGI 的优势:
特性 | WSGI | ASGI |
---|---|---|
同步支持 | ✅ | ✅ |
异步支持 | ❌ | ✅ |
WebSocket | ❌ | ✅ |
长连接/推送 | ❌ | ✅ |
性能 | 一般 | 更高 |
所以:
- 你用
FastAPI
,它是 ASGI 框架 - 你用
uvicorn
,它是 ASGI 服务器 - 它们搭配在一起,让你能写出高性能、支持异步的 Python Web 接口系统。
总结:
ASGI 是面向“未来 web 应用”的 Python 标准,支持异步、高并发、WebSocket,而
uvicorn
是它的最常用服务器。