看了网上的几个简单例子,一步一步做,但无一成功。都连不上websocket。
后来按一个视频教程的操作步骤来做,成功了。差别在于视频教程中加了
pip install daphne
和setting.py中
连不上的表现:
前端报错:
WebSocket connection to 'ws://127.0.0.1:8000/ws/some_path/' failed:
WebSocket is closed now.
后端报错:
Not Found: /ws/some_path/
"GET /ws/some_path/ HTTP/1.1" 404 2445
--------------------------------
原因:简单教程中默认你在开发环境中使用python manage.py runserver。理论上来说。如果你的Django项目仅使用InMemoryChannelLayer(不用Redis),且在本地开发环境中只用Django自带的runserver命令进行测试,那么通常情况下不需要额外安装Daphne或uvicorn。
InMemoryChannelLayer:
- 这是一种内存中的通道层,主要用于开发和测试。
- 它简单、易用,不需要外部的ASGI服务器来支持。
- Django的runserver命令已经内置了对InMemoryChannelLayer的支持。
那为什么我在本地上runserver却还要安装Daphne呢?先不追究,暂时先按照这个方法操作。
这个问题在开发环境没有遇到,估计部署到服务器上也是会遇到的。