一般而言,在Django中使用ASGI代替WSGI进行 HTTP请求处理会有明显和明显的缺点吗?
我知道ASGI用于异步任务,但它也可以通过http.*
个通道处理同步HTTP请求。它是否比普通的WSGI慢,或者与WSGI相比是否有任何不支持的功能?
另外,在同一个项目中提供REST API和websocket处理,您更喜欢哪种方式?为什么?
答案 0 :(得分:2)
我没有进行任何基准测试,但是在几个项目中同时使用WSGI和ASGI,并且没有看到它们的性能之间有任何足够的差异,所以如果Django WSGI性能可以接受,那么ASGI也会工作。
对于REST + websockets API,我使用了ASGI。如果在项目中启用了ASGI,则没有理由使用WSGI(WSGI适用于ASGI)。
答案 1 :(得分:0)
我认为您会发现的一个主要缺点是ASGI服务器较新,因此测试较少,功能可能较少,数量较少,并且背后的社区可能较小。但是,我使用ASGI服务器(达芙妮)来处理所有事情,并觉得websocket在用户体验方面提供了太多功能,因此一切最终都会转移到ASGI。
能够在代码中使用asyncio是Web编程的主要好处。您可以一次运行10个查询,而不必在一个线程上同时运行10个查询,同时访问缓存并同时发出HTTP请求,而不必一次又一次运行10个查询。