当前位置: 首页 > article >正文

Django + websocket 连不上

看了网上的几个简单例子,一步一步做,但无一成功。都连不上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呢?先不追究,暂时先按照这个方法操作。

这个问题在开发环境没有遇到,估计部署到服务器上也是会遇到的。

-------------------------

ASGI 服务器能够处理 WebSocket 等协议,而 Django 自带的 WSGI 服务器(runserver)只能处理 HTTP 协议。

------------------------

pip install channels 跟 pip install channels[daphne] 的区别:后者除了安装 channels 之外,还会额外安装 Daphne作为 ASGI 服务器如果你计划将项目部署到生产环境中,使用 pip install channels[daphne] 会更加方便,因为它直接提供了一个可用于生产的 ASGI 服务器。

注意:pip install channels daphne 并不等效于 pip install "channels[daphne]" ,前者是将channelsdaphne 是作为两个独立的包进行安装的,没有考虑 channels 在与 daphne 一起使用时可能需要的额外关联配置项、依赖项。后者同时考虑并安装可能需要的额外依赖项,确保 channelsdaphne 的集成工作良好。

在大多数情况下,如果你计划使用 channels 并且希望它与 daphne 良好地协作,建议使用 pip install "channels[daphne]"


http://www.kler.cn/a/289738.html

相关文章:

  • Qt 实现文件监控程序
  • Vue中优雅的使用Echarts的三种方式
  • LLMs之PDF:zeroX(一款PDF到Markdown 的视觉模型转换工具)的简介、安装和使用方法、案例应用之详细攻略
  • 大数据学习12之HBase
  • ESP32-S3模组上跑通esp32-camera(12)
  • OSG开发笔记(三十一):OSG中LOD层次细节模型介绍和使用
  • 内部知识库:企业智慧资产的安全守护者
  • 低秩近似概念
  • Dev C++:简单步骤下载与安装指南
  • DHCPv6 浅析 配置示例
  • 基于vue框架的超市商品管理系统m9o29(程序+源码+数据库+调试部署+开发环境)系统界面在最后面。
  • Redis Desktop Manager 0.8.8.384 安装与使用详解
  • Spire.PDF for .NET【文档操作】演示:创建 PDF 文档
  • python-实战4拆分pdf文件
  • 小土堆pytorch
  • CSS实现水滴效果图
  • 【Linux】进程间的关系(第十三篇)
  • oracle日期加减方式
  • 【区块链 + 物联网】智慧路灯计费和融资区块链解决方案 | FISCO BCOS应用案例
  • H265视频转换H264视频对应m3u8格式地址播放完整案例
  • IP地址查询功能详解—构建风险画像与代理识别
  • 传统CV算法——特征匹配算法
  • 创建MySQL数据库和相应表
  • C#复习之封装_静态成员
  • 「数组」计数排序|桶排序|基数排序(C++)
  • Android的Launch