websocket握手不成功
来源:9-14 前端WebSocket API讲解

ian116
2020-11-18
websocket disconnect, websocket握手不成功,是routing中几个认证没通过吗?实在查不出问题,麻烦老师帮忙看下,谢谢
后端代码:
3回答
-
weixin_慕丝9404249
2021-01-08
我是同样的报错,不过问题解决了,版本不一样了, 弄了两晚才成功
反馈下,给和我一样强迫症想试试新版本的同学参考:
------------------------------------------
channels 3.0.0起的调整:
1、在路由设置中必须使用as_asgi()方法(类似django的as_view()):
websocket_urlpatterns = [ re_path(r'ws/chat/(?P<room_name>\w+)/$', consumers.ChatConsumer.as_asgi()),] # 官方文档
2、在ProtocolTypeRouter中必须显示地指出‘http’:
from django.core.asgi import get_asgi_application application = ProtocolTypeRouter({ "http": get_asgi_application(), # 必须! # Other protocols here.}) # 官方文档
这里和老师视频中的可选(可写可不写)不一样了,使用新版本的需要注意
--------------------------------------------------
还有两个不一样的地方:
1、老师新建了routings.py来放路由,我直接写在asgi.py里了,好像官方文档默认就是这个
2、实际上根据上面新版本作了调试之后还是有报错,显示redis连接不成功(但实际Redis运行正常),很可能与这里有关:
CHANNEL_LAYERS = { "default": { "BACKEND": "channels_redis.core.RedisChannelLayer", "CONFIG": { "hosts": [f'{env("REDIS_URL", default="redis://127.0.0.1:6379")}/3', ], # channels layer 缓存 }, }, }
我查看了Redis版本,是3.X版本(yum install redis 似乎没有最近的版本)
于是卸载了,重新安装了最新稳定版( Redis-6.0.9)
然后重启了一下成功了
此外,上面“}/3'”这个地方我的好像报了下错,最好不要有空格
212021-01-11 -
Jack
2020-11-20
你说得对,版本问题是极有可能的,先换下这些试试
Django==2.1.7
channels==2.1.7
celery==4.3.0rc3
00 -
Jack
2020-11-19
您好,看这里应该是后端哪个地方写错了
麻烦截图一下后端代码,websocket连接和认证 ,路由的部分
012020-11-19
相似问题