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

  • 10
    点赞
  • 7
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

打赏作者

攻城狮的梦

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

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

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

打赏作者

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

抵扣说明:

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

余额充值