Django配置WebSocket:django3配置websocket步骤

这篇具有很好参考价值的文章主要介绍了Django配置WebSocket:django3配置websocket步骤。希望对大家有所帮助。如果存在错误或未考虑完全的地方,请大家不吝赐教,您也可以点击"举报违法"按钮提交疑问。

一、websocket概述

简单可以认为是在web上实现socket功能,在服务器上与浏览器保持socket长连接。

实现websocket是通过magic string

二、环境概述

解释器:python3.9

django==3.2

channels==3.0.4  #有些时候是channels版本有问题,导致配置不生效

三、配置步骤

3.1、项目结构

test_websocket

        --chat

                --routings.py

                --consumers.py

        --test_websocket

                --settings.py

                --asgi.py

        --manage.py

3.2、修改settings.py文件

#1、注册应用和channels
INSTALLED_APPS = [
    'django.contrib.admin',
    'django.contrib.auth',
    'django.contrib.contenttypes',
    'django.contrib.sessions',
    'django.contrib.messages',
    'django.contrib.staticfiles',
    'chat.apps.ChatConfig', #注册chat应用
    'channels', #注册channels
]

#2、添加ASGI_APPLICATION
ASGI_APPLICATION = 'test_websocket.asgi.application'

3.3、修改chat应用

将所有的websocket的请求都放到这个应用中

1、在consumers.py中增加处理websocket请求的类

from channels.generic.websocket import WebsocketConsumer
from channels.exceptions import StopConsumer
from asgiref.sync import async_to_sync
import time

class ChatView(WebsocketConsumer):
    def websocket_connect(self, message):
        #客户端与服务端进行握手时,会触发这个方法
        #服务端允许客户端进行连接,就是握手成功
        self.accept()

    def websocket_receive(self, message):
        #接收到客户端发送的数据
        recv = message.get('text')
        print('接收到的数据,',recv)
        if recv == 'close':
            #服务的主动断开连接
            print('服务器断开连接')
            self.close()
        else:
            #客户端向服务端发送数据
            self.send(f'我收到了,{time.strftime("%Y-%m-%d %H:%M:%S")}')

    def websocket_disconnect(self, message):
        #客户端端口连接时,会触发该方法,断开连接
        print('客户端断开连接')
        raise StopConsumer()

2、在routings.py增加websocket路由

from django.urls import path
from . import consumers

#这个变量是存放websocket的路由
socket_urlpatterns = [
    path('chat/socket/',consumers.ChatView.as_asgi()),
]

3.4、修改asgi.py文件:跟settings.py同目录下

import os
from django.core.asgi import get_asgi_application
from channels.routing import ProtocolTypeRouter,URLRouter
#导入chat应用中的路由模块
from chat import routings

os.environ.setdefault('DJANGO_SETTINGS_MODULE', 'test_websocket.settings')
application = ProtocolTypeRouter({
    #http路由走这里
    "http":get_asgi_application(),
    #chat应用下rountings模块下的路由变量socket_urlpatterns
    "websocket":URLRouter(routings.socket_urlpatterns)
})

3.5、启动项目

python manage.py runserver 0.0.0.0:8888

django3 websocket,django,websocket,python

 看到有这个,就是配置成功了

四、测试

1、测试网站

EasySwoole-WebSocket在线测试工具

服务器地址

ws://127.0.0.1:8888/chat/socket/文章来源地址https://www.toymoban.com/news/detail-597209.html

到了这里,关于Django配置WebSocket:django3配置websocket步骤的文章就介绍完了。如果您还想了解更多内容,请在右上角搜索TOY模板网以前的文章或继续浏览下面的相关文章,希望大家以后多多支持TOY模板网!

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

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

相关文章

  • Django使用WebSocket

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

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

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

    2023年04月23日
    浏览(53)
  • 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日
    浏览(45)
  • 如何在 Django框架下完成 websocket 连接 & 在 Heroku 上部署 websocket 应用

    Websocket 和 Socket 是两种不同的通信协议,都是用于建立网络连接的方式,但它们各有特点和适用场景。以下是它们之间的主要区别。 Websocket 双向通信: Websocket 协议可以实现客户端与服务器的双向通信,在任何时候,只要对方在线,客户端和服务器都可以主动发起通讯。 基

    2024年02月12日
    浏览(50)
  • 如何在 Django框架下完成 websocket 连接

    Websocket 和 Socket 是两种不同的通信协议,都是用于建立网络连接的方式,但它们各有特点和适用场景。以下是它们之间的主要区别。 Websocket 双向通信: Websocket 协议可以实现客户端与服务器的双向通信,在任何时候,只要对方在线,客户端和服务器都可以主动发起通讯。 基

    2024年02月12日
    浏览(53)
  • django使用channels实现webSocket启动失败

    使用channels启动ASGI结果却是普通启动,如下: 我希望得到的启动方式如下: setting.py: asgi.py: 我打断点就拦不到,甚至 ASGI_APPLICATION=‘’ 都不报错。 盲猜是版本问题,查不到一个官方解释。人类疑惑高版本咋会失去低版本有的实用功能~ 简直是人类迷惑,如果直接使用 pip ins

    2024年02月16日
    浏览(44)
  • django 使用channels 搭建websocket聊天程序

     channels官方文档:Django Channels — Channels 4.0.0 documentation  效果如下:  主要实现功能 基于Django的认证的群聊 具体实现 当建立websocket的时候,建立之前是http消息,我们可以拿到http消息里面的cookie等信息进行认证,本次使用的是jwt认证,因此需要在建立的连接的时候,将jwt认

    2024年02月12日
    浏览(45)
  • 在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日
    浏览(36)
  • 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日
    浏览(41)
  • Django利用Channels+websocket开发聊天室

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

    2024年02月05日
    浏览(44)

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

支付宝扫一扫打赏

博客赞助

微信扫一扫打赏

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

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

二维码1

领取红包

二维码2

领红包