Django3-(1)-[配置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

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

四、测试

1、测试网站

EasySwoole-WebSocket在线测试工具

服务器地址

ws://127.0.0.1:8888/chat/socket/

你可能感兴趣的:(django,websocket,python)