【Django Channels】WebSocket协议实战篇

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

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

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

  • views里:
    • 【Django Channels】WebSocket协议实战篇_第2张图片
  • 模板文件:
    • 【Django Channels】WebSocket协议实战篇_第3张图片
  • 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】附录篇

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