在 django 中配置 asgi 应用程序和通道的正确方法是什么?

问题描述 投票:0回答:2

我刚刚开始学习 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(),
})

设置.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 到底是如何工作的?

python django django-channels asgi
2个回答
0
投票

您正在观看的教程使用的是 3.0.4 django 通道。我也遇到过同样的问题。在 3.0.4 中你必须使用通道,而在 django 4.0.0 中它被更改为 daphne。


0
投票

官方文档建议将 Daphne 添加到已安装应用列表的顶部,以确保其优先于其他已安装应用,并用作处理基于 Channels 的请求的服务器。

pip install -U "channels[daphne]"

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

© www.soinside.com 2019 - 2024. All rights reserved.