独立Django项目中出现其他项目的Django Channels broken pipe错误如何解决
问题原因
你遇到的重复404报错大概率不是ASGI项目后台进程残留导致的,核心原因是之前打开过Channels项目的浏览器标签页未关闭,页面内的WebSocket自动重连逻辑每隔30秒向同端口的服务发起连接请求,现在旧项目运行在8000端口,这些请求就全部打到了旧项目上。
解决步骤
- 优先排查浏览器标签页:找到之前访问过Channels项目聊天页面的标签直接关闭,或对对应页面执行硬刷新(Ctrl+F5/Command+Shift+R),90%以上的情况执行完这一步报错就会消失。
- 若关闭浏览器后仍有报错,排查占用8000端口的残留进程:
- macOS/Linux 执行命令:
sudo lsof -i:8000 # 拿到对应进程PID后执行 kill -9 <替换为查到的PID>- Windows 执行命令:
netstat -ano | findstr :8000 # 拿到对应进程PID后执行 taskkill /PID <替换为查到的PID> /F - 排查所有Python相关的Channels/Django进程:
ps aux | grep -E "daphne|runserver|channels" | grep -v grep # 把查询到的所有相关进程全部kill即可
验证技巧
你可以先把旧项目切换到其他端口启动,执行./manage.py runserver 8001,如果新端口下没有出现/ws路径的404报错,即可100%确认是前端页面的重连请求导致的问题,和后台进程无关。
内容的提问来源于stack exchange,提问作者Dylan
相关产品推荐
相关产品推荐

