Что такое ASGI и чем он отличается от WSGI

Ответ

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 выглядит так:

  1. ASGI-сервер: Uvicorn, Hypercorn, Daphne.
  2. 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