0

我知道答案是“总是取决于”,但一般来说,在 Sanic 等异步框架中使用 asgiref 包装器是有理由的。

https://github.com/django/asgiref https://github.com/channelcat/sanic

我的主要问题是,为什么有人会在异步框架中使用它,我了解 Django 的用例,但是如果您考虑过异步编程,那么处理问题的方式似乎有点懒惰。

告诉我我错了。

4

2 回答 2

2

我不是asgiref特别熟悉。然而,话虽如此,我很熟悉 asgi 的想法,它可以替代 wsgi。

就 Sanic 而言,这有点无关紧要。Sanic 有自己的内置服务器,它开箱即用地异步运行。

我不想告诉你你本身是错的,但我看不出它在 Sanic 世界中的用途。

于 2018-05-03T21:40:16.870 回答
1

一、背景:

一些 asyncio 框架,例如ASGI 成熟之前的时间点,sanic并且aiohttp因为适合作为 asyncio 服务器/应用程序接口。

因此,他们已经在他们的代码库中内置了网络服务器实现。他们可以切换到使用 ASGI 作为接口,而不是他们自己的内部接口,但这意味着他们的维护人员需要做大量工作。

那么,为什么值得付出努力?

好吧,如果他们这样做,他们将获得的好处是:

  • 能够在一堆不同的服务器实现下运行。(无论是他们自己的实现,还是任何uvicorn, hypercorn,daphne服务器。)能够在服务器实现之间透明地切换提供了一个更强大的生态系统,并且意味着服务器实现可以跨框架共享。Sanic 将获得具有 HTTP/2 支持、Windows 支持和 PyPy 支持的服务器实现,并解决它在套接字流控制方面存在的一些突出问题。
  • 能够从共享中间件和其他工具中受益。能够编写适用于任何 ASGI 框架的中间件有助于整个生态系统。您可以编写调试中间件、静态文件服务、测试客户端等...与任何 ASGI 框架一起使用,而不必为每个框架构建新的东西。
  • 较低的复杂性。拥有一个经过彻底设计和独立的服务器/应用程序接口有助于减少开发人员在查看应用程序框架内部时需要考虑的表面区域,因为这意味着您在服务器代码和应用程​​序代码之间有一个非常有据可查的边界。
  • 可组合。因为 ASGI 是一个可组合的接口,所以您可以以有用的方式组合它。例如,在同一个网络服务器上提供两个不同的 Sanic 应用程序。

简而言之,ASGI 是有益的,原因与 WSGI 有益的原因相同。对于sanic现在编写新的 asyncio 框架的任何人来说,这算不上什么胜利,因为他们已经完成了编写服务器实现的所有繁重工作,但是他们仍然可以从中获得好处,而且绝对是整个社区的胜利。

相关:Sanic 上的 ASGI 门票

(另请注意asgiref,这只是一个 Python 包,其中包含一些用于处理 ASGI 框架的助手,这也恰好是保存 ASGI 规范文档的存储库。问题实际上是关于将 ASGI 用于 Sanic,而不是使用asgiref.)

于 2018-08-15T13:57:54.583 回答