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

django:django2配置websocket

源码地址:

https://gitee.com/liuhaizhang/django2-configuring-websocketicon-default.png?t=N3I4https://gitee.com/liuhaizhang/django2-configuring-websocket

python3.9.0

django==2.2.1

channels==2.2.0

项目结构:

test_websocket_django2

        -chat

        -home

        -test_websocket_django2

        -manage.py

一、配置settings.py

INSTALLED_APPS = [
    'django.contrib.admin',
    'django.contrib.auth',
    'django.contrib.contenttypes',
    'django.contrib.sessions',
    'django.contrib.messages',
    'django.contrib.staticfiles',

    'channels', #1、注册channels
    'chat.apps.ChatConfig',
    'home.apps.HomeConfig',

]



WSGI_APPLICATION = 'test_websocket_django2.wsgi.application'
#2、新增ASGI应用
ASGI_APPLICATION = 'test_websocket_django2.asgi.application'

二、chat应用:所有websocket都放在这里

新建

routings.py : 存放websocket路由

from django.urls import path
from . import consumers

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

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()

三、在settings.py同级目录下创建asgi.py

写入内容:

from channels.auth import AuthMiddlewareStack
from channels.routing import ProtocolTypeRouter, URLRouter
import chat.routings #导入websocket的路由

application = ProtocolTypeRouter({
    'websocket': AuthMiddlewareStack(
        URLRouter(
            chat.routings.websocket_urlpatterns, #把websocket的路由注册进去
        )
    ),
})

四、启动项目,测试

1、启动

python manage.py runsever

启动显示,应该是这样:ASGI/Channels

 2、测试

测试网站:

EasySwoole-WebSocket在线测试工具

 


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

相关文章:

  • 记录日志中logback和log4j2不能共存的问题
  • 【C++】详解RAII思想与智能指针
  • 【时间之外】IT人求职和创业应知【34】-人和机器人,机器人更可靠
  • ExecStart=/usr/bin/mongod --config /etc/mongod.conf (code=exited, status=2)
  • 把握鸿蒙生态崛起的机遇:开发者视角的探讨
  • 大模型就业收入高吗?大模型入门到精通,收藏这篇就够了
  • 删除的文件怎样恢复?实用的方法
  • TomcatServletHTTP
  • 【Linux】项目自动化构建工具 —— make/Makefile
  • 【Java|golang】1419. 数青蛙
  • 操作系统第二章——进程与线程(中)
  • SpringCloud_Config配置中心和Bus消息总线和Stream消息驱动
  • 远程桌面连接是什么?如何开启远程桌面连接详细教程
  • 不用花一分钱!!!获得一个自己的网页版chatGPT
  • 【前端面试题】深拷贝的终极实现
  • Mysql 中left join时 on、and、where区别
  • Redis高可用系列——Set类型底层详解
  • 云计算实战应用案例精讲-【深度学习】多模态融合情感分析(论文篇二)
  • 基于simulink进行音频波束成形系统的多核仿真
  • 项目实战-redis
  • SpringBoot——pom文件:parent
  • 通过计算系统稳定性比较迭代次数
  • Baumer工业相机堡盟工业相机如何联合BGAPISDK和OpenCVSharp实现图像的直方图算法增强(C#)
  • uboot下内存操作mw和md命令详解
  • 如何防御流量攻击
  • 写PPT的步骤