django中配置使用websocket

Django 默认情况下并不支持 WebSocket,但你可以通过集成第三方库如 channels 来实现 WebSocket 功能。channels 是一个 Django 应用,它提供了对 WebSocket、HTTP2 和其他协议的支持。

下面是如何在 Django 项目中使用 WebSocket 的基本步骤:

一:安装 channels

首先,你需要安装 channels 和 channels-redis(用于消息传递):

pip install channels channels-redis

二:配置项目

在你的 settings.py 中,添加以下配置:

INSTALLED_APPS

INSTALLED_APPS = [

...

'channels',

]

Channels 配置

ASGI_APPLICATION = 'your_project.routing.application'

Channels layers 配置

CHANNEL_LAYERS = {

'default': {

'BACKEND': 'channels_redis.core.RedisChannelLayer',

'CONFIG': {

"hosts": [('127.0.0.1', 6379)],

},

},

}

三:创建路由

在 your_project 目录下创建一个名为 routing.py 的文件,并添加以下内容

from django.urls import path

from your_app.consumers import YourConsumer

websocket_urlpatterns = [

path('ws/your-path/', YourConsumer.as_asgi()),

]

四:创建 Consumer

在你的应用中创建一个名为 consumers.py 的文件,并添加一个Consumer

from channels.generic.websocket import AsyncWebsocketConsumer

import json

class YourConsumer(AsyncWebsocketConsumer):

async def connect(self):

当 WebSocket 连接建立时,此方法会被调用

await self.accept()

async def disconnect(self, close_code):

当 WebSocket 连接关闭时,此方法会被调用

pass

async def receive(self, text_data=None, bytes_data=None):

当从客户端接收到消息时,此方法会被调用

data = json.loads(text_data)

处理接收到的数据

pass

async def your_custom_method(self, data):

你可以定义自己的方法来处理特定逻辑

然后从其他地方调用这个方法

pass

async def send_message_to_client(self, message):

发送消息给客户端

await self.send(text_data=json.dumps(message))

五:前端连接 WebSocket

在前端,你可以使用原生的 WebSocket API 或其他库(如 socket.io)来连接你的 WebSocket 服务。以下是一个使用原生 API 的示例

const ws = new WebSocket('ws://your-domain/ws/your-path/');

ws.onopen = function(event) {

console.log("WebSocket 已连接");

ws.send(JSON.stringify({ your_data: 'here' }));

};

ws.onmessage = function(event) {

const data = JSON.parse(event.data);

console.log("接收到数据:", data);

};

ws.onclose = function(event) {

console.log("WebSocket 已关闭");

};

ws.onerror = function(error) {

console.error("WebSocket 错误:", error);

};

六:运行项目

使用 Daphne 或 Daphne + Runserver 运行你的项目:

daphne your_project.asgi:application

或python manage.py runserver

相关推荐
悟乙己17 小时前
使用 Python 中的强化学习最大化简单 RAG 性能
开发语言·python·agent·rag·n8n
max50060017 小时前
图像处理:实现多图点重叠效果
开发语言·图像处理·人工智能·python·深度学习·音视频
AI原吾17 小时前
玩转物联网只需十行代码,可它为何悄悄停止维护
python·物联网·hbmqtt
云动雨颤17 小时前
Python单元测试入门:3个核心断言方法,帮你快速定位代码bug
python·单元测试
SunnyDays101118 小时前
Python 实现 HTML 转 Word 和 PDF
python·html转word·html转pdf·html转docx·html转doc
跟橙姐学代码18 小时前
Python异常处理:告别程序崩溃,让代码更优雅!
前端·python·ipython
蓝纹绿茶19 小时前
Python程序使用了Ffmpeg,结束程序后,文件夹中仍然生成音频、视频文件
python·ubuntu·ffmpeg·音视频
mahuifa19 小时前
OpenCV 开发 -- 图像基本处理
人工智能·python·opencv·计算机视觉
一个java开发19 小时前
distributed.client.Client 用户可调用函数分析
大数据·python
eqwaak019 小时前
Matplotlib 动态显示详解:技术深度与创新思考
网络·python·网络协议·tcp/ip·语言模型·matplotlib