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

Django Channels WebSocket连接异常:404错误及连接关闭问题排查

搞定Django Channels的WebSocket 404错误

兄弟,你的问题核心是路径不匹配,再加上几个小配置细节没到位,我一步步给你说怎么修:

1. 先改前端的连接路径(最关键的一步)

你后端routing.py里配置的WebSocket路径是/ws/chat/,但前端JS里写的是/chat/——少了ws前缀,服务器肯定找不到对应的路由,直接返回404了!

把JS代码里的连接地址改成这样:

var myWebSocket = new WebSocket("ws://" + window.location.host + "/ws/chat/");

2. 清理后端路由里的冗余代码

你的routing.py里有一行import routing as route,但你根本没用到这个导入,而且自己的文件也叫routing.py,很容易搞出循环导入的问题,直接删掉就行。修改后的routing.py应该是这样:

from channels.auth import AuthMiddlewareStack
from channels.routing import ProtocolTypeRouter, URLRouter
from django.conf.urls import url
from consumers import ChatConsumer

websocket_urlpatterns = [
    url(r'^ws/chat/$', ChatConsumer),
]

application = ProtocolTypeRouter({
    # (http->django views is added by default)
    'websocket': AuthMiddlewareStack(
        URLRouter(
            websocket_urlpatterns
        )
    ),
})

3. 确保用对了ASGI服务器

Django Channels不能依赖普通的runserver(虽然新版本Django会自动切换,但保险起见),得用专门的ASGI服务器比如Daphne或者Uvicorn启动:

# 用Daphne启动
daphne chatsys.asgi:application
# 或者用Uvicorn
uvicorn chatsys.asgi:application --host 0.0.0.0 --port 8000

另外,别忘了把daphne加到settings.py的INSTALLED_APPS最前面:

INSTALLED_APPS = [
    'daphne',
    # 你的其他APP,比如django.contrib.admin之类的
]

4. 最后检查依赖安装

确保你已经装了Channels和ASGI相关的包:

pip install channels daphne

如果改完还不行,就去看服务器日志,或者用浏览器开发者工具的Network标签,看看WebSocket请求的具体路径和响应信息,应该就能定位到剩下的问题了。

内容的提问来源于stack exchange,提问作者Sam B.

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.29 08:42:59