【问题标题】:Disadvantages of using ASGI instead of WSGI [closed]使用 ASGI 而不是 WSGI 的缺点 [关闭]
【发布时间】:2018-03-05 07:47:27
【问题描述】:
一般来说,在 Django 中使用 ASGI 而不是 WSGI 来处理 HTTP 请求处理有什么明显的缺点?
我知道 ASGI 用于 异步 任务,但它也可以通过 http.* 通道处理同步 HTTP 请求。它是否比普通的 WSGI 慢,或者与 WSGI 相比是否有任何不支持的功能?
另外,在同一个项目中同时提供 REST API 和 websocket 处理,你更喜欢哪种方式,为什么?
- WSGI for REST + ASGI for websocket 在不同的服务器实例中
- WSGI for REST + ASGI for websocket 在同一台机器上
- 两者的 ASGI
【问题讨论】:
标签:
python
django
django-channels
【解决方案1】:
我认为您会发现的一个主要缺点是 ASGI 服务器较新,因此测试较少,功能可能较少,数量较少,并且可能拥有较小的社区。但是,我使用 ASGI 服务器 (Daphne) 处理所有事情,并且觉得 websockets 在用户体验方面提供了如此多的东西,最终一切都将转向 ASGI。
能够在代码中使用 asyncio 是 Web 编程的一大优势。您可以同时运行 10 个查询,而不是一个接一个地运行 10 个查询并等待每个查询返回,同时访问缓存并在单个线程上同时发出 HTTP 请求。
【解决方案2】:
我没有做任何基准测试,但在几个项目中同时使用了 WSGI 和 ASGI,并且没有看到它们之间的性能有任何足够的差异,所以如果你可以接受 Django WSGI 性能,那么 ASGI 也可以工作。
对于 REST + websockets API,我对两者都使用了 ASGI。如果您在项目中启用了 ASGI,则没有理由使用 WSGI(WSGI 在 ASGI 上工作)。