1、使用channels实现WebSocket通信的一般场景
![Image.png](https://i-blog.csdnimg.cn/blog_migrate/b2bc1cfa46e07b2cb194bfedded6d773.png)
- 说明:
- 用户的请求先走到视图,视图做完处理并保存到数据库后,将信息传递给Websocket协议的Consumer进行消息推送的实现。
- 视图调用Consumer实现消息推送的方式:
- 1.调用get_channel_layer( )获得频道管理器(一般取名为channel_layer)
- 2.通过频道管理器向指定组推送数据。api为:
channel_layer.group_send(【组名】, 【负载】)
,其中【负载】为一个字典:
- type指明Consumer中的方法
- message传递将要返回给前端的数据。
- sender传递发送者
2、示例:(以前后端不分离的代码为例,前后端分离做适当调整即可)
- js代码:
- js原生就提供了websocket通信相关的API,也有一些再封装的第三方包(如提供自动重连功能的ReconnectingWebSocket),在此就不做相关赘述了,仅提供一份示例代码供参考(在此就不赘述所处应用场景了):
const ws_scheme = window.location.protocol === "https:" ? "wss" : "ws";
const ws_path = ws_scheme + "://" + window.location.host + "/ws/test" + "/";
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();
}
}
相关文章
- 【Django Channels】概述篇
- 【Django Channels】快速上手篇
- 【Django Channels】WebSocket协议实战篇
- 【Django Channels】附录篇