使用ASGI而不是WSGI的缺点

Ana*_*sis 10 python django django-channels

通常,在Django中使用ASGI代替WSGI进行HTTP请求的明显和明显的缺点是什么?

我知道ASGI用于异步任务,但它也可以通过http.*通道处理同步HTTP请求。它比普通的WSGI慢吗?还是与WSGI相比有不受支持的功能?

另外,要在同一项目中同时提供REST API和websocket处理,您更喜欢哪种方式,为什么呢?

  1. WSGI for REST + ASGI for websocket在不同的服务器实例中
  2. WSGI for REST + ASGI for websocket在同一台机器上
  3. 两者的ASGI

kag*_*ick 15

我认为您会发现的一个主要缺点是 ASGI 服务器较新,因此测试较少,可能功能较少,数量较少,并且可能背后的社区较小。但是,我使用 ASGI 服务器(Daphne)来处理所有事情,并且觉得 websockets 在用户体验方面提供了如此多的东西,以至于一切最终都会转移到 ASGI。

能够在您的代码中使用 asyncio 是 Web 编程的一个主要好处。您可以同时运行 10 个查询,而不是一个接一个地运行 10 个查询并等待每个查询返回,同时在单个线程上访问缓存并同时发出 HTTP 请求。


小智 7

我没有做任何基准测试,但是在几个项目中同时使用了 WSGI 和 ASGI,并且没有看到它们的性能之间有任何足够的差异,所以如果 Django WSGI 性能对你来说是可以接受的,那么 ASGI 也可以工作。

对于 REST + websockets API,我对两者都使用了 ASGI。如果您在项目中启用了 ASGI(WSGI 在 ASGI 上工作),则没有理由使用 WSGI。