Короткий ответ
WSGI и ASGI — это интерфейсы, которые позволяют Python-веб-приложениям общаться с веб-серверами. WSGI спроектирован для синхронных приложений, а ASGI дополнительно поддерживает асинхронный код, WebSocket и конкурентную обработку множества соединений.
Как это работает подробнее
Выбор интерфейса влияет на сервер и архитектуру приложения.
- WSGI. Web Server Gateway Interface традиционно используется при развёртывании Django и подходит для приложений без асинхронной обработки запросов.
- ASGI. Asynchronous Server Gateway Interface поддерживает синхронные и асинхронные приложения, включая асинхронные представления Django.
- Соединения. ASGI допускает долгоживущие соединения, например WebSocket, и асинхронные рабочие процессы.
- Серверы. Для WSGI используют Gunicorn и uWSGI, для ASGI — Uvicorn и Daphne.
- Обработка. WSGI обрабатывает каждый запрос синхронно, а ASGI позволяет обрабатывать множество соединений конкурентно.
Что использовать на практике
- Классический Django. Для синхронного приложения оставайся на WSGI с Gunicorn или uWSGI.
- Асинхронные задачи. Переходи на ASGI с Uvicorn или Daphne, когда нужны WebSocket и асинхронная обработка.
- Гибкость. Код, написанный с учётом обоих режимов, может работать и как WSGI, и как ASGI.
Подводные камни
- Ограничения WSGI. Для WebSocket и долгоживущих соединений WSGI не подходит — требуется ASGI.
- Не тот сервер. Gunicorn и uWSGI не дадут асинхронных преимуществ, для ASGI нужны Uvicorn или Daphne.