Django Channels连接Redis失败[Errno111],WebSocket测试异常求助
问题分析与解决方案
错误原因定位
[Errno 111] 无法连接localhost:6379 本质是Redis服务未运行、不可达,或配置错误,和Daphne、AuthMiddlewareStack无直接关联(你之前移除这些操作是无效的,建议恢复Daphne和AuthMiddlewareStack)。
逐步排查与修复
1. 确认Redis服务是否运行
- Linux系统:
若未运行,启动服务:sudo systemctl status redis-serversudo systemctl start redis-server - macOS(通过Homebrew安装):
启动服务:brew services list | grep redisbrew services start redis
2. 手动验证Redis连接
执行以下命令测试Redis连通性:
redis-cli ping
若返回PONG,说明Redis正常运行;若返回错误,检查Redis配置文件(通常在/etc/redis/redis.conf)中是否开启了bind 127.0.0.1(允许本地连接),且未设置错误的密码。
3. 检查Channels-Redis配置
确保settings.py中的CHANNEL_LAYERS配置正确:
CHANNEL_LAYERS = { "default": { "BACKEND": "channels_redis.core.RedisChannelLayer", "CONFIG": { "hosts": [("127.0.0.1", 6379)], # 确认地址和端口与Redis实际运行情况一致 # 若Redis设置了密码,添加以下行: # "password": "你的Redis密码", }, }, }
如果Redis运行在非默认端口或远程主机,更新hosts中的对应值。
4. 检查防火墙限制
Linux系统下,确认防火墙未拦截6379端口:
sudo ufw status
若未允许6379端口,执行:
sudo ufw allow 6379
WebSocket测试方法推荐
1. 浏览器控制台测试
打开浏览器开发者工具(F12),在Console标签页执行:
// 替换为你的WebSocket路由路径 const ws = new WebSocket('ws://localhost:8000/ws/your-endpoint/'); ws.onopen = () => { console.log('WebSocket连接成功'); ws.send('测试消息'); }; ws.onmessage = (event) => { console.log('收到消息:', event.data); }; ws.onerror = (error) => { console.error('连接错误:', error); }; ws.onclose = () => { console.log('连接关闭'); };
2. 命令行工具wscat
- 先安装:
npm install -g wscat - 连接测试:
wscat -c ws://localhost:8000/ws/your-endpoint/
连接成功后可直接输入消息交互。
3. Postman可视化测试
- 打开Postman,新建WebSocket请求
- 输入WebSocket URL(如
ws://localhost:8000/ws/your-endpoint/) - 点击「Connect」按钮,发送消息并查看响应
内容的提问来源于stack exchange,提问作者Tecnicus
相关产品推荐
相关产品推荐

