django使用channels实现webSocket启动失败

这篇具有很好参考价值的文章主要介绍了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 os

from django.core.asgi import get_asgi_application
from channels.routing import ProtocolTypeRouter, URLRouter
from . import routing

os.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请求试试看,可以看到握手与连接的请求成功收到并返回

django使用channels实现webSocket启动失败,bug,django,websocket,channels,python

看看浏览器抓包,可以看到黄色方框的http请求成功,红色方框的websocket请求也是建立连接成功。
django使用channels实现webSocket启动失败,bug,django,websocket,channels,python文章来源地址https://www.toymoban.com/news/detail-592664.html

到了这里,关于django使用channels实现webSocket启动失败的文章就介绍完了。如果您还想了解更多内容,请在右上角搜索TOY模板网以前的文章或继续浏览下面的相关文章,希望大家以后多多支持TOY模板网!

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处: 如若内容造成侵权/违法违规/事实不符,请点击违法举报进行投诉反馈,一经查实,立即删除!

领支付宝红包 赞助服务器费用

相关文章

  • Django利用Channels+websocket开发聊天室

    提示:文章写完后,目录可以自动生成,如何生成可参考右边的帮助文档 目录 前言 一、什么是Websocket? 2.Python-Django ASGI 3,Django开发聊天室或信息推送 前言 数据库系统课程设计要求,要开发一个B2B的售卖平台,本来开发浅薄的我,粗糙又基础的完成了一些基本的功能,想要

    2024年02月05日
    浏览(40)
  • django channels实战(websocket底层原理和案例)

    asgi.py在django项目同名app目录下 django代码总结 报错如下: 1、不要安装最新的版本,建议安装指定版本 pip install -U channels==3.0.2 2、在python .manage.py runserver 0.0.0.0:8080启动的前提下,新开一个cmd窗口,启动daphne服务 1)首先,确保你已经安装了 Daphne。可以使用以下命令安装最新版

    2024年02月14日
    浏览(39)
  • Django使用WebSocket

    实现一个系统,20 个用户同时打开网站,呈现出来一个群聊界面 解决方案 轮询 :让 浏览器每隔2s向后台 发送一次请求,缺点:延迟,请求太多网站压力大 长 轮询: 客户端向服务端 发送请求,服务器最多宕20s,一旦有数据接入,就立即返回。数据的响应没有延迟时间。

    2024年01月17日
    浏览(38)
  • Django实现websocket聊天室

    WebSocket协议是基于TCP的一种新的网络协议。它实现了浏览器与服务器双向通信,即允许服务器主动发送信息给客户端。因此,在WebSocket中,浏览器和服务器只需要完成一次握手,两者之间就直接可以创建持久性的连接,并进行双向数据传输,客户端和服务器之间的数据交换变

    2023年04月23日
    浏览(47)
  • 如何使用Django 结合WebSocket 进行实时目标检测呢?以yolov5 为例,实现:FPS 25+ (0: 系统简介与架构)

    访问:http://127.0.0.1:8000/ObjectDetection/ObjectDetection1/ 先看下效果:两个摄像头实时展示 之后更新了效果,打算加上检测结果和 FPS ,结果加上FPS 实测了一下,好家伙一秒30-40 帧都行 在我的3060 上,这是python 写的 前后端实时检测你敢信,还两个摄像头机位。

    2023年04月08日
    浏览(44)
  • django websocket实现聊天室功能

    注意事项channel版本 django2.x 需要匹配安装 channels 2 django3.x 需要匹配安装 channels 3 Django 3.2.4 channels 3.0.3 Django 3.2.* channels 3.0.2 Django4.2 channles==3.0.5 是因为最新版channels默认不带daphne服务器 直接用命令 python manage.py runsever 默认运行的是wsgi ,修改,删除settings中的wsgi,都不能正确运

    2024年01月22日
    浏览(42)
  • 基于Django websocket实现视频画面的实时传输案例

    📌本案例是基于B/S架构的视频监控画面的实时传输,使用django作为服务端的开发框架。 Django Channels 是一个用于在 Django 框架中实现实时、异步通信的扩展库。传统的 Django 是基于请求-响应模式的,每个请求都会经过 Django 的视图函数进行处理并返回响应。而 Channels 提供了基

    2024年02月04日
    浏览(46)
  • 在Django5中使用Websocket进行通信

    参考文档:https://channels.readthedocs.io/en/latest/installation.html 新增:chat/templates/chat/index.html 修改:chat/views.py 新增:chat/urls.py 修改:Django5Websocket/urls.py 启动服务,浏览器访问:http://localhost:8000 新增:chat/consumers.py 新增:chat/routing.py 修改:Django5Websocket/wsgi.py 修改:chat/views.py 新增

    2024年02月03日
    浏览(35)
  • Django配置WebSocket:django3配置websocket步骤

    简单可以认为是在web上实现socket功能,在服务器上与浏览器保持socket长连接。 实现websocket是通过magic string 解释器:python3.9 django==3.2 channels==3.0.4  #有些时候是channels版本有问题,导致配置不生效 test_websocket         --chat                 --routings.py                 --consum

    2024年02月16日
    浏览(46)
  • webSocket及使用webSocket实现实时聊天通信

    webSocket在开始的时候依旧使用的是http协议,只不过后面保持tcp持久链接,是一种全双工通信。webSockets和http很像,它的请求url用的是ws、wss,对应http、https 初始化 npm init -y 安装ws依赖 npm i --save ws 写服务器代码 服务器启动 node server.js 配置前端代码,即告诉浏览器这个请求不要

    2023年04月11日
    浏览(39)

觉得文章有用就打赏一下文章作者

支付宝扫一扫打赏

博客赞助

微信扫一扫打赏

请作者喝杯咖啡吧~博客赞助

支付宝扫一扫领取红包,优惠每天领

二维码1

领取红包

二维码2

领红包