Во-первых, фон:
Некоторые из асинхронных сред, такие как sanic
и aiohttp
, предшествуют точке, в которой сформировался ASGI, и потому подходят для использования в качестве интерфейса сервера / приложения asyncio.
В результате у них уже есть реализации веб-сервера, встроенные в их кодовые базы. Они могли бы перейти на использование ASGI в качестве интерфейса, а не на свои собственные внутренние интерфейсы, но для их сопровождающих это означало бы кучу работы.
Итак, почему может стоить усилий?
Что ж, выгода, которую они получили бы, если бы они сделали сделали бы так:
- Уметь работать под кучей разных реализаций сервера. (Либо их собственные реализации, либо любой из серверов
uvicorn
, hypercorn
, daphne
.) Возможность прозрачного переключения между реализациями серверов дает более устойчивую экосистему и означает, что реализации серверов могут совместно использоваться в рамках. Sanic получит реализацию сервера с поддержкой HTTP / 2, поддержкой Windows и PyPy, которая решит некоторые нерешенные проблемы, связанные с управлением потоком сокетов.
- Получите выгоду от общего промежуточного программного обеспечения и других инструментов. Возможность написания промежуточного программного обеспечения, которое работает в любой среде ASGI, помогает экосистеме в целом. Вы можете написать промежуточное программное обеспечение для отладки, статическое обслуживание файлов, тестовые клиенты и т. Д., Которые работают с любой инфраструктурой ASGI, вместо того, чтобы создавать новые вещи для каждой платформы.
- Меньшая сложность. Наличие тщательно разработанного и независимого интерфейса сервера / приложения помогает уменьшить площадь поверхности, которую разработчики должны учитывать при просмотре внутренних компонентов инфраструктуры приложения, поскольку это означает, что вы получили действительно хорошо документированную границу между кодом сервера и кодом приложения.
- наборный. Поскольку ASGI является составным интерфейсом, вы можете комбинировать его полезными способами. Например, обслуживайте два разных приложения Sanic с одного веб-сервера.
Короче говоря, ASGI выгоден по той же причине, что и WSGI. Это менее выигрыш для sanic
, чем для любого, кто сейчас пишет новую фреймворк Asyncio, поскольку они уже проделали всю тяжелую работу по написанию серверной реализации, но от этого все еще есть преимущества, и это было бы абсолютно победой для сообщества в целом.
Похожие: Билет ASGI на Sanic .
(Также обратите внимание, что asgiref
- это всего лишь пакет Python с несколькими помощниками для работы со средами ASGI, который также является репозиторием, в котором хранятся документы спецификации ASGI. Вопрос в том, чтобы использовать ASGI для Sanic, а не используя asgiref
.)