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文件

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、测试网站

服务器地址

ws://127.0.0.1:8888/chat/socket/
经验分享 程序员 微信小程序 职场和发展