You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Django Channels 4.0.0无法连接WebSocket服务器问题求助

无法连接Django Channels WebSocket服务器问题

问题描述

按照官方文档搭建了一个小型Django Channels服务器,使用WebSocket King测试时,始终无法连接到ws://127.0.0.1:8000/chat/。启动Django服务器无报错,尝试将Channels版本降级至3.0.5并在INSTALLED_APPS中添加channels,问题仍未解决。

相关配置文件

Settings.py

INSTALLED_APPS = [
    'daphne',
    'django.contrib.admin',
    'django.contrib.auth',
    'django.contrib.contenttypes',
    'django.contrib.sessions',
    'django.contrib.messages',
    'django.contrib.staticfiles',
    'rest_framework',

    #Custom apps
    'user_auth',
    'core',
]

ASGI_APPLICATION = 'buddies.asgi.application'

asgi.py

import os

from channels.auth import AuthMiddlewareStack
from channels.routing import ProtocolTypeRouter, URLRouter
from channels.security.websocket import AllowedHostsOriginValidator
from django.core.asgi import get_asgi_application
from django.urls import path

from core.consumers import EchoConsumer

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

django_asgi_app = get_asgi_application()

application = ProtocolTypeRouter({
    "http": django_asgi_app,
    "websocket": AllowedHostsOriginValidator(
        AuthMiddlewareStack(
            URLRouter([
                # path("chat/admin/", AdminChatConsumer.as_asgi()),
                path("chat/", EchoConsumer.as_asgi()),
            ])
        )
    ),
})

consumers.py(位于core应用内)

# it is inside the core app

from channels.consumer import SyncConsumer

class EchoConsumer(SyncConsumer):

    def websocket_connect(self, event):
        self.send({
            "type": "websocket.accept",
        })

    def websocket_receive(self, event):
        self.send({
            "type": "websocket.send",
            "text": event["text"],
        })

排查建议

  • 确认启动方式:必须使用Daphne启动服务,可执行命令daphne buddies.asgi:application,或确保使用Django 3.0+版本的python manage.py runserver(新版本会自动调用Daphne)。
  • 检查ALLOWED_HOSTS配置:在settings.py中添加ALLOWED_HOSTS = ['127.0.0.1', 'localhost'],避免AllowedHostsOriginValidator因Origin不匹配拒绝连接。
  • 临时关闭Origin验证:注释掉asgi.py中的AllowedHostsOriginValidator,直接使用AuthMiddlewareStack包裹URLRouter,测试是否能正常连接,排除Origin验证导致的问题。
  • 验证消费者路径:确认core.consumers.EchoConsumer的导入路径正确,core应用已在INSTALLED_APPS中注册。
  • 检查版本兼容性:确保Channels版本与Django版本匹配,比如Channels 4.x要求Django 3.2及以上版本。
  • 查看服务器日志:启动服务后观察控制台输出,查看是否有WebSocket连接相关的错误信息,如路径匹配失败、权限异常等。
  • 检查端口占用:确认8000端口未被其他程序占用,可尝试更换端口(如8001)重新测试。

内容的提问来源于stack exchange,提问作者Deepanshu Joshi

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.02 14:57:37