如何正确配置Django中的ASGI应用程序和Channels?

3
我刚开始学习Django中的通道和ASGI,我看了一些教程,发现他们这样配置ASGI应用程序:
asgi.py
import os
from django.core.asgi import get_asgi_application
from channels.routing import ProtocolTypeRouter, URLRouter

os.environ.setdefault('DJANGO_SETTINGS_MODULE', 'mywebsite.settings')

application = ProtocolTypeRouter({
    'http':get_asgi_application(),
})

settings.py

INSTALLED_APPS = [
    'channels',

    'django.contrib.admin',
    'django.contrib.auth',
    'django.contrib.contenttypes',
    'django.contrib.sessions',
    'django.contrib.messages',
    'django.contrib.staticfiles',

    'chat'
]
ASGI_APPLICATION = 'mywebsite.asgi.application'

我希望你能帮我检查一下,当我运行我的服务器时,它应该是在ASGI/Channel服务器上运行的,就像这样:

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

但是我的仍在使用默认设置。
Starting development server at http://127.0.0.1:8000/

当我使用Daphne并将其放置在已安装的应用程序中而不是通道时。
    'daphne',

    'django.contrib.admin',
    'django.contrib.auth',
    'django.contrib.contenttypes',
    'django.contrib.sessions',
    'django.contrib.messages',
    'django.contrib.staticfiles',

    'chat'
]

它运行良好

Starting ASGI/Daphne version 4.0.0 development server at http://127.0.0.1:8000/

有人能告诉我这里发生了什么?Django 如何与 ASGI 协同工作?

1个回答

0
官方文档建议将Daphne添加到已安装应用程序列表的顶部,以确保它优先于其他已安装的应用程序,并用作处理基于Channels的请求的服务器。
pip install -U channels["daphne"]

Daphne是Django Channels使用的ASGI服务器,用于接受WebSocket连接。因此,如果您想使用Django Channels,则必须将daphne添加到已安装的应用程序中。另一方面,Channels不需要在已安装的应用程序中,因为它们本身不是一个应用程序,而是用于创建应用程序的框架。因此,您必须使用其他基于Channels框架构建的应用程序来利用它。


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