使用Django Channels测试Websocket遭遇404 Not Found错误求助
Django Channels WebSocket 404 错误排查方案
核心问题:ASGI配置语法错误
你的asgi.py代码存在语法错误,直接导致WebSocket路由无法正确加载:
application = ProtocolTypeRouter({ 'http': get_asgi_application(), 'websocket': URLRouter( myapp.routing.websocket_urlpatterns. # 多余的点号 myapp.routing.websocket_urlpatterns # 重复调用变量 ) })
修复后的asgi.py代码
import os from django.core.asgi import get_asgi_application from channels.routing import ProtocolTypeRouter, URLRouter import myapp.routing os.environ.setdefault('DJANGO_SETTINGS_MODULE', 'routing_pro.settings') application = ProtocolTypeRouter({ 'http': get_asgi_application(), 'websocket': URLRouter(myapp.routing.websocket_urlpatterns) })
额外检查项
- 使用ASGI服务器启动项目
避免用Django默认python manage.py runserver(新版虽支持,但推荐专用ASGI服务器),改用以下命令启动:daphne routing_pro.asgi:application # 或 uvicorn routing_pro.asgi:application - 验证路由路径一致性
确保前端连接地址ws://127.0.0.1:8000/ws/sc/与routing.py中定义的路径完全匹配,注意末尾斜杠。
错误原因说明
原asgi.py的语法错误会导致Python解析失败,ASGI应用无法初始化,服务器会 fallback到WSGI模式运行。而WSGI不支持WebSocket协议,你的请求会被当作普通HTTP请求处理,因找不到对应路由返回404。
内容的提问来源于stack exchange,提问作者Mohit Mishra
相关产品推荐
相关产品推荐

