我知道答案是“总是取决于”,但一般来说,在 Sanic 等异步框架中使用 asgiref 包装器是有理由的。
https://github.com/django/asgiref https://github.com/channelcat/sanic
我的主要问题是,为什么有人会在异步框架中使用它,我了解 Django 的用例,但是如果您考虑过异步编程,那么处理问题的方式似乎有点懒惰。
告诉我我错了。
我知道答案是“总是取决于”,但一般来说,在 Sanic 等异步框架中使用 asgiref 包装器是有理由的。
https://github.com/django/asgiref https://github.com/channelcat/sanic
我的主要问题是,为什么有人会在异步框架中使用它,我了解 Django 的用例,但是如果您考虑过异步编程,那么处理问题的方式似乎有点懒惰。
告诉我我错了。
我不是asgiref
特别熟悉。然而,话虽如此,我很熟悉 asgi 的想法,它可以替代 wsgi。
就 Sanic 而言,这有点无关紧要。Sanic 有自己的内置服务器,它开箱即用地异步运行。
我不想告诉你你本身是错的,但我看不出它在 Sanic 世界中的用途。
一、背景:
一些 asyncio 框架,例如ASGI 成熟之前的时间点,sanic
并且aiohttp
因为适合作为 asyncio 服务器/应用程序接口。
因此,他们已经在他们的代码库中内置了网络服务器实现。他们可以切换到使用 ASGI 作为接口,而不是他们自己的内部接口,但这意味着他们的维护人员需要做大量工作。
那么,为什么值得付出努力?
好吧,如果他们这样做,他们将获得的好处是:
uvicorn
, hypercorn
,daphne
服务器。)能够在服务器实现之间透明地切换提供了一个更强大的生态系统,并且意味着服务器实现可以跨框架共享。Sanic 将获得具有 HTTP/2 支持、Windows 支持和 PyPy 支持的服务器实现,并解决它在套接字流控制方面存在的一些突出问题。简而言之,ASGI 是有益的,原因与 WSGI 有益的原因相同。对于sanic
现在编写新的 asyncio 框架的任何人来说,这算不上什么胜利,因为他们已经完成了编写服务器实现的所有繁重工作,但是他们仍然可以从中获得好处,而且绝对是整个社区的胜利。
相关:Sanic 上的 ASGI 门票。
(另请注意asgiref
,这只是一个 Python 包,其中包含一些用于处理 ASGI 框架的助手,这也恰好是保存 ASGI 规范文档的存储库。问题实际上是关于将 ASGI 用于 Sanic,而不是使用asgiref
.)