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

  • Post author:
  • Post category:python




运行环境参考

 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



版权声明:本文为weixin_42332166原创文章,遵循 CC 4.0 BY-SA 版权协议,转载请附上原文出处链接和本声明。