Ответ
ASGI (Asynchronous Server Gateway Interface) — это стандарт (спецификация) для взаимодействия между асинхронными Python веб-фреймворками и веб-серверами. Он является духовным наследником WSGI и расширяет его возможности для поддержки современных веб-протоколов.
Ключевое отличие от WSGI:
- WSGI (Web Server Gateway Interface) — синхронный стандарт. Он рассчитан на классический цикл "один запрос — один ответ". Он не может обрабатывать долгоживущие соединения, такие как WebSockets.
- ASGI — асинхронный стандарт. Он позволяет приложению работать в цикле событий (event loop) и обрабатывать множество соединений и событий одновременно. Это делает его идеальным для WebSocket, HTTP/2, long-polling и других протоколов, требующих постоянного соединения.
Основные возможности ASGI:
- Поддержка
async/await
. - Обработка нескольких входящих и исходящих событий для одного приложения.
- Нативная поддержка долгоживущих соединений.
Пример использования в экосистеме:
Современный асинхронный стек на Python выглядит так:
- ASGI-сервер:
Uvicorn
,Hypercorn
,Daphne
. - ASGI-фреймворк:
FastAPI
,Starlette
,Django
(начиная с версии 3.0).
# Пример минимального приложения на FastAPI (ASGI-фреймворк)
from fastapi import FastAPI
# app - это ASGI-совместимое приложение
app = FastAPI()
@app.get("/")
async def read_root():
return {"message": "Hello, ASGI World!"}
# Запуск через ASGI-сервер:
# uvicorn main:app --reload