【Django Channels】WebSocket协议实战篇

文章介绍了如何使用DjangoChannels通过WebSocket进行通信,包括视图处理后将信息传递给Consumer进行消息推送的流程,以及前端通过JavaScript的WebSocketAPI与服务器建立连接并接收消息的示例代码。
摘要由CSDN通过智能技术生成

1、使用channels实现WebSocket通信的一般场景

  • Image.png
  • 说明:
    • 用户的请求先走到视图,视图做完处理并保存到数据库后,将信息传递给Websocket协议的Consumer进行消息推送的实现。
    • 视图调用Consumer实现消息推送的方式:
      • 1.调用get_channel_layer( )获得频道管理器(一般取名为channel_layer)
      • 2.通过频道管理器向指定组推送数据。api为:channel_layer.group_send(【组名】, 【负载】),其中【负载】为一个字典:
        • type指明Consumer中的方法
        • message传递将要返回给前端的数据。
        • sender传递发送者

2、示例:(以前后端不分离的代码为例,前后端分离做适当调整即可)

  • views里:
    • image.png
  • 模板文件:
    • image.png
  • js代码:
    • js原生就提供了websocket通信相关的API,也有一些再封装的第三方包(如提供自动重连功能的ReconnectingWebSocket),在此就不做相关赘述了,仅提供一份示例代码供参考(在此就不赘述所处应用场景了):
// WebSocket连接,使用wss(https)或者ws(http)
const ws_scheme = window.location.protocol === "https:" ? "wss" : "ws";
const ws_path = ws_scheme + "://" + window.location.host + "/ws/test" + "/";    // 使用websocket实现私信
const ws = new ReconnectingWebSocket(ws_path);
ws.onmessage = function (event) {
    const data = JSON.parse(event.data);
    if (data.sender === activeUser) {  // 发送者为当前选中的用户
        $(".send-message").before(data.message); // 将接收到的消息插入到聊天框
        scrollConversationScreen();  // 滚动条下拉到底
    }
}

相关文章

  1. 【Django Channels】概述篇
  2. 【Django Channels】快速上手篇
  3. 【Django Channels】WebSocket协议实战篇
  4. 【Django Channels】附录篇
  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值