有人可以澄清Django Channels Project与新Django native async support之间的区别或互补吗?
据我了解,Django-Channels是一个在Django外部启动的项目,然后开始集成到核心Django中。但是这项工作的当前状态仍然让我感到困惑。
例如,今天我使用的是Django 2.2,我想为我的项目添加WebSocket支持。我应该:
今天我使用的是Django 2.2,我想为我的项目添加WebSocket支持。
如果您想为您的应用程序添加websocket支持,目前无需升级到django 3.0。 Django 2.2 plus通道可以做到这一点-暂时是最好的方法。 (尽管如果没有充分的理由不这样做,升级到django 3.0绝对没有害处)。我将尝试进一步解释该答案的原因。
据我了解,Django-Channels是一个 开始于Django之外,然后开始整合到 核心Django。但是这项工作的当前状态仍然令人困惑 我。
[是的,我的理解是,渠道是从Django核心开发人员之一(Andrew Godwin-曾在实现Django 3.0中带来的异步更改方面发挥作用的)开始的一个项目。如果仅安装Django,它不会自动包含在内,但它正式是django项目的一部分,并且自2016年9月以来一直存在(请参阅here)。它现在在版本2.4上,因此是一个已建立且稳定的项目,可用于向您的Django应用添加websockets功能。
尽管渠道为django应用程序添加了一些添加异步功能的方法,但Django的核心仍然是同步的。正在逐步引入的“异步”项目解决了这一问题。这里要注意的关键是它正在逐步引入。 Django由几层组成:
现在要完全从异步中受益,我们确实需要所有这些层都异步,否则实际上不会有任何性能上的好处。异步将逐步推出:
一旦到达最后一点,也许值得考虑将Django的异步功能用于网络套接字之类的东西,但是目前我们甚至无法利用我们现在也可以处理ASGI的事实作为WSGI服务器。
[djangoCon去年发表了精彩的演讲,概述了异步django的计划。您可以查看它here。