django使用channels实现webSocket启动失败

问题描述

使用channels启动ASGI结果却是普通启动,如下:

Watching for file changes with StatReloader
Performing system checks...System check identified no issues (0 silenced).
July 15, 2023 - 18:23:49
Django version 4.2, using settings 'staffSystem_django.settings'
Starting development server at http://127.0.0.1:8000/
Quit the server with CONTROL-C.

我希望得到的启动方式如下:

System check identified no issues (0 silenced).
July 15, 2023 - 18:23:49
Django version 4.2, using settings 'staffSystem_django.settings'
Starting ASGI/Channels version 3.0.1 development server at http://127.0.0.1:8000/
Quit the server with CTRL-BREAK.

setting.py:

INSTALLED_APPS = ['django.contrib.admin','django.contrib.auth','django.contrib.contenttypes','django.contrib.sessions','django.contrib.messages','django.contrib.staticfiles','channels','app01.apps.App01Config',
]ASGI_APPLICATION = 'staffSystem_django.asgi.application'

asgi.py:

import osfrom django.core.asgi import get_asgi_application
from channels.routing import ProtocolTypeRouter, URLRouter
from . import routingos.environ.setdefault('DJANGO_SETTINGS_MODULE', 'staffSystem_django.settings')# application = get_asgi_application()application = ProtocolTypeRouter({'http': get_asgi_application(),'websocket': URLRouter(routing.websocket_urlpatterns)
})

我打断点就拦不到,甚至ASGI_APPLICATION=‘’ 都不报错。


原因分析:

盲猜是版本问题,查不到一个官方解释。人类疑惑高版本咋会失去低版本有的实用功能~

简直是人类迷惑,如果直接使用pip install channels的话会自动下载比较高的版本(我下载的4.0.1的版本),所以在注册channels的时候,Django的settings.py中ASGI_APPLICATION没有被配置识别,使得总是在使用WSGI_APPLICATION中的配置,我还以为是WSGI_APPLICATION影响了,但是注释掉也不用ASGI_APPLICATION。然后还不会报错,简直无语到家。我甚至还看见有另一个叫做django-channels,下载注册app后也没有卵用。


解决方案:

下载低版本

第一次尝试,我下载了2.3.0

pip install channels==2.3.0

重新启动django程序,终于报错,看到报错是真开心不会一脸懵逼了。

报错提示信息说没有as_asgi() 这个函数。这个函数是我在安装channels=4.0.1时写代码类名点出来的不是直接写出来的,证明父类是一定有这个函数。我点进下载2.3.0后的源码查看确实没有这个函数,那就证明是后来才有这个函数。

第二次尝试,下载3.0.1,这次就成功了!!!

pip install channels==3.0.1

启动django程序

System check identified no issues (0 silenced).
July 15, 2023 - 18:17:31
Django version 4.2, using settings 'staffSystem_django.settings'
Starting ASGI/Channels version 3.0.1 development server at http://127.0.0.1:8000/
Quit the server with CTRL-BREAK.

看到Starting ASGI/Channels 就是成功了。

再发送一个ws请求试试看,可以看到握手与连接的请求成功收到并返回

在这里插入图片描述

看看浏览器抓包,可以看到黄色方框的http请求成功,红色方框的websocket请求也是建立连接成功。
在这里插入图片描述

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/2573.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

JavaWeb(3)——HTML、CSS、JS 快速入门

一、JavaScript 运算符 • 赋值运算符( ) 赋值运算符执行过程? 将等号右边的值赋予给左边, 要求左边必须是一个容器 出现是为了简化代码, 比如让 let age 18 ,age 加 2 怎么写呢 let age 18age 2console.log(age)age * 2con…

javaee jstl表达式

jstl是el表达式的扩展 使用jstl需要添加jar包 package com.test.servlet;import java.io.IOException; import java.util.ArrayList; import java.util.HashMap; import java.util.List; import java.util.Map;import javax.servlet.ServletException; import javax.servlet…

下载编译Chromium

参考:Mac上本地编译Chrome浏览器踩坑笔记(2021.02最新) - 掘金 For Mac: 一、下载编译工具链:deptool git clone https://chromium.googlesource.com/chromium/tools/depot_tools.git export PATH"$PATH:/Users/yumlu/cod…

什么是DevOps监控以及如何在组织中实施?

如今的软件开发商经常面临两大挑战——快速交付和大规模创新。DevOps通过在软件开发生命周期(SDLC)中引入自动化来开发和交付高质量的软件,从而帮助解决这些挑战。 持续集成(CI)/持续部署(CD)是DevOps实践中自动化的关键组件。它可以自动化代码构建、测试…

力扣 1005. K 次取反后最大化的数组和

题目来源:https://leetcode.cn/problems/maximize-sum-of-array-after-k-negations/description/ C题解1:最直接的想法就是负的变正的,如果负的元素数量小于k,就挑选绝对值大的负数变正;如果负的元素数量大于k&#xf…

阿里云声音复刻

阿里云声音复刻 个性化人声定制 阿里云个性化人声定制是智能语音交互产品自学习平台下的一部分 使用方式:https://help.aliyun.com/document_detail/456006.html 方式一:控制台界面定制使用方式 方式二:通过OpenAPI定制:在该页…

回归预测 | MATLAB实现基于KELM-Adaboost核极限学习机结合AdaBoost多输入单输出回归预测

回归预测 | MATLAB实现基于KELM-Adaboost核极限学习机结合AdaBoost多输入单输出回归预测 目录 回归预测 | MATLAB实现基于KELM-Adaboost核极限学习机结合AdaBoost多输入单输出回归预测预测效果基本介绍模型描述程序设计参考资料 预测效果 基本介绍 1.MATLAB实现基于KELM-Adaboo…

IP基础知识总结

IP他负责的是把IP数据包在不同网络间传送,这是网络设计相关的,与操作系统没有关系。所以这部分知识,不是网络的重点。IP和路由交换技术联系紧密。但是要作为基本知识点记住。 一、基本概念 网络层作用:实现主机与主机之间通信。 …

linux之Ubuntu系列(三)远程管理指令☞SSH 高级应用 RSA非对称加密 以及免密登录,配置别名

对称加密 、非对称加密 1、对称加密中加密和解密使用的秘钥是同一个;非对称加密中采用两个密钥,一般使用公钥进行加密,私钥进行解密。 2、对称加密解密的速度比较快,非对称加密和解密花费的时间长、速度相对较慢。 3、对称加密的…

81. 正则表达式

一、概述二、匹配单个字符三、匹配一组字符四、使用元字符五、重复匹配六、位置匹配七、使用子表达式八、回溯引用九、前后查找十、嵌入条件参考资料 一、概述 正则表达式用于文本内容的查找和替换。 正则表达式内置于其它语言或者软件产品中,它本身不是一种语言或…

uniapp微信小程序使用axios(vue3+axios+ts版)

版本号 "vue": "^3.2.45", "axios": "^1.4.0", "axios-miniprogram-adapter": "^0.3.5", 安装axios及axios适配器,适配小程序 yarn add axios axios-miniprogram-adapter 使用axios 在utils创建utils/…

7个银行的软件测试项目实战,别再说简历项目不知道怎么写了

目录 前言 项目描述1:上海华瑞银行直连票据项目 项目描述2:平安金服风控中台系统 项目描述3:众安创展APP项目 项 目4: 招商银行VTM自助渠道服务系统 项 目5:招商银行票据支付 项 目6: 平安银行风控系…

Virus Total 曝数据泄露大事件:涉及多国情报部门

The Hacker News 网站披露,可疑文件和病毒在线检测平台 VirusTotal 曝出数据泄露事故,一名员工无意中将部分 VirusTotal 注册客户的姓名、电子邮件地址等敏感数据信息上传到了恶意软件扫描平台,此举导致约 5600 名用户数据泄露。 据悉&#x…

【MySQL技术专题】「问题实战系列」深入探索和分析MySQL数据库的数据备份和恢复实战开发指南(备份+恢复篇)

深入探索和分析MySQL数据库的数据备份和恢复实战开发指南 MySQL数据库备份全量备份全量备份应用场景 增量备份binlogbinlog主要作用binlog的作用主要有两个方面 开启binlog日志功能要开启MySQL的binlog日志步骤 mysqlbinlogmysqlbinlog的使用案例 全量备份与增量备份结合按天全…

安全开发-PHP应用留言板功能超全局变量数据库操作第三方插件引用后台模块SessionCookieToken身份验证唯一性

文章目录 开发环境数据导入-mysql架构&库表列数据库操作-mysqli函数&增删改查数据接收输出-html混编&超全局变量第三方插件引用-js传参&函数对象调用身份验证-Cookie使用身份验证-Session使用唯一性判断-Token使用具体安全知识点:Cookie和Session都…

复习java基础

复习一天有点忘了的知识: 结构化编程 结构化程式设计(英语:Structured programming)是1960年代开始发展起来的一种编程典范。它采用子程序、程式码区块、for循环以及while循环等结构来取代传统的goto。 指导思想 自顶向下、逐步求精、模块化 编程过程 流程图是…

Appium 安卓环境的配置

目录 前言: 环境准备 写个脚本玩玩 前言: 在使用Appium进行安卓自动化测试之前,需要配置相应的安卓环境。 环境准备 为了避免走弯路,我们先要确保三点: Android SDK API > 17 (Additional features require …

Kafka 入门到起飞 - 核心概念(术语解释)

在kafka之旅,我们会大量讨论Kafka中的术语,那么就让我们先来了解一下这些核心概念 消息(Message): kafka的数据单元称为消息,相当于DB里的一行数据或一条记录 消息由字节数组组成 批次: 生产者组一批数据再向kafka推送…

C++编程(四) —— OOP

文章目录 前言一、this指针二、构造和析构三、深拷贝浅拷贝浅拷贝深拷贝 编程实践 前言 什么是OOP思想? OOP语言的四大特征: 抽象,封装/隐藏,继承,多态 一、this指针 this指针》类》很多对象 一套成员方法是如何处…

深入学习 Redis - 深挖经典数据类型之 string

目录 前言 一、string 类型 1.1、操作命令 set / get (设置 / 获取) mset / mget(批量 > 设置 / 获取) setnx / setex / psetex (设置时指定不同方式) incr / incrby / decr / decrby/ incrbyfloat…