如何在 Django Channels 中,将 WSGI 与 Daphne ASGI 并行运行?

10

我正在使用官方的 Django channels v2 在我的项目中使用 Django Channels。我的简单 channels 应用程序已经完成,并且如果运行 python manage.py runserver 就可以正常工作。

但是,我想在不同的端口上运行 Django Channels,所以现在我正在使用 Daphne。
使用 daphne my_project.asgi:application --port 8001 可以在 8001 端口上正常工作。

INFO     Starting server at tcp:port=8001:interface=127.0.0.1
INFO     HTTP/2 support not enabled (install the http2 and tls Twisted extras)

同时我在另一个终端中运行python manage.py runserver,它也可以正常工作。现在我的两个通道分别在端口8001,Django在端口8000工作良好,但是我的runserver命令正在运行ASGI/Channels而不是WSGI开发服务器。

Starting ASGI/Channels version 2.2.0 development server at http://127.0.0.1:8000/

取代

Starting development server at http://127.0.0.1:8000/

settings.py

ASGI_APPLICATION = 'my_project.routing.application'

WSGI_APPLICATION = 'my_project.wsgi.application'

如果我在views.py请求中调试任何函数,那么它将是ASGI请求而不是Django WSGI请求。
asgi.py
import os
import django
from channels.routing import get_default_application

os.environ.setdefault("DJANGO_SETTINGS_MODULE", "my_project.settings")
django.setup()
application = get_default_application()

我的问题是:

  1. 如何在我们的普通函数视图请求中获取Django请求而不是ASGI请求(例如def index(request))?或者如果我们安装了Django Channels,每个请求都会成为ASGI请求吗?
  2. python mange.py runworker命令的用途是什么?
1个回答

3

就像您在这里阅读的一样:https://asgi.readthedocs.io/en/latest/

ASGI(异步服务器网关接口)是WSGI的精神继承者,旨在为支持异步的Python Web服务器、框架和应用程序提供标准接口。

WSGI为同步Python应用程序提供了标准,而ASGI为同步和异步应用程序都提供了标准,具有WSGI向后兼容实现以及多个服务器和应用程序框架。

因此,对于您的第一个问题的答案是:是的,所有请求都将是ASGI

问题2-这是一个命令,运行多个工作进程以异步方式处理您的通道请求https://channels.readthedocs.io/en/1.x/deploying.html#run-worker-servers


如果问题1的答案是肯定的,那么第三方应用程序会如何运作?他们是否期望使用Django请求。从现在开始,如果我发送ASGI请求(或实例),它们会崩溃吗? - karnataka
那么如果是这样的话,WSGI_APPLICATION 完全没有用了,对吗? - karnataka
1
ASGI请求具有与普通Django请求相同的所有属性,因此这不是问题,对您来说应该是透明的。WSGI_APPLICATION对于runserver命令是必需的。https://dev59.com/SZXfa4cB1Zd3GeqPbz3x#36107047 - pawelbylina
1
是的,老板,即使我在设置文件中注释掉了WSGI_APPLICATION的代码,我的应用程序和runserver也能正常工作。 - karnataka
@pako,你能看到这个问题吗?我的问题也很相似。https://dev59.com/Erjna4cB1Zd3GeqP81k9?noredirect=1 - Nabeel Ayub
显示剩余3条评论

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接