python语言django框架websocket协议使用指南

本文介绍了如何在Python3.9环境中,利用Daphne4.0.0和Channels4.0.0为Django4项目设置WebSocket通信。首先通过Anaconda安装所需库,然后在settings.py中注册应用和配置ASGI_APPLICATION。接着修改asgi.py文件,创建并配置routings.py和consumers.py,实现数据的接收与发送。最后,通过运行runserver命令启动项目,并提供了测试工具。
摘要由CSDN通过智能技术生成

运行环境参考

 1. python 3.9
 2. daphne 4.0.0
 3. channels 4.0.0
 4. Django 4

第一步

安装上面的运营环境,特别是用Anaconda中,这个简单 pip install 统统解决,

第二步

打开项目的配置文件setting.py找到INSTALLED_APPS配置项,进行应用注册:
如果实在不知道怎么搞,复制粘贴即可,如:

INSTALLED_APPS = [
    'daphne', #这是要你添加的 
    "django.contrib.admin",
    "django.contrib.auth",
    "django.contrib.contenttypes",
    "django.contrib.sessions",
    "django.contrib.messages",
    "django.contrib.staticfiles",
    'channels',#这是要你添加的
]
# websocket配置
ASGI_APPLICATION = '你自己的django项目名称.asgi.application' #这是要你添加的

第三步

打开django项目配置包中的asgi.py文件,进行修改:

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

os.environ.setdefault('DJANGO_SETTINGS_MODULE', 'django项目名称.settings')
application = ProtocolTypeRouter({
    # 当存在http请求时,路由走这里
    "http": get_asgi_application(),
    # 当存在websocket请求时,将请求交给指定应用中的路由模块处理
    "websocket": URLRouter(routings.socket_urlpatterns)
})

第四步

如果你有应用就直接在应用目录下创建一个routings.py文件,没有应用就先创建应用(注意创建应用还得去注册应用哦)

创建应用命令

# 创建应用
python manage.py startapp 应用名称

routings.py文件复制下面代码


from django.urls import path
# 当前文件同级目录下创建consumers.py文件
from . import consumers

# 这个变量是存放websocket的路由
socket_urlpatterns = [
    path('访问路由', consumers.方法类名.as_asgi()),
]

第五步

routings.py文件同级目录下创建consumers.py文件,粘贴下列代码:

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


class 自己取个类名(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("服务器收到你的来信")

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

终极步骤

命令行运行项目:python manage.py runserver 0.0.0.0:8000
验证是否成功:
在这里插入图片描述

网站接口测试

可以使用这个网站:http://www.easyswoole.com/wstool.html

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

WiFiMing

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值