Django2.0.4 + websocket 实现实时通信,主动推送,聊天室及客服系统
webSocket是一种在单个TCP连接上进行全双工通信的协议。
webSocket使得客户端和服务器之间的数据交换变得更加简单,允许服务端主动向客户端推送数据。在WebSocket API中,浏览器和服务器只需要完成一次握手,两者之间就直接可以创建持久性的连接,并进行双向数据传输
现在,很多网站为了实现推送技术,所用的技术都是轮询。轮询是在特定的的时间间隔(如每1秒),由浏览器对服务器发出HTTP请求,然后由服务器返回最新的数据给客户端的浏览器。这种传统的模式带来很明显的缺点,即浏览器需要不断的向服务器发出请求,然而HTTP请求可能包含较长的头部,其中真正有效的数据可能只是很小的一部分,显然这样会浪费很多的带宽等资源。
基于dwebsocket库来将socket嵌入到django服务中,使其服务兼具http协议和socket协议,能够达到实时前后端通信,后端主动推送等功能。
1,按装依赖库dwebsocket库
pip install dwebsocket
2,定义视图逻辑
from dwebsocket.decorators import accept_websocket
## 定时和立即推送任务
@accept_websocket
def test_websocket(request):
global message_tui_conunt
global message_tui_id
if request.is_websocket():
while 1:
print("————————")
if message_tui_conunt:
time.sleep(1)
dit = {'contnet':message_tui_conunt}
request.websocket.send(json.dumps(dit))
message_tui_conunt = ''
if message_tui_id:
time.sleep(1)
res = Messages.objects.get(id=int(message_tui_id))
time_tui = str(res.times)
print(time_tui)
if time.strftime('%Y-%m-%d %H:%M:%S') == time_tui:
dit = {'contnet':res.content}
request.websocket.send(json.dumps(dit))
message_tui_id = ''
3,配置路由
path('test_socket',test_socket),
path('test_websocket',test_websocket)
4,前端发送消息页面
<body>
<input id="chat-message-input" type="text" size=""/><br/>
<input id="chat-message-submit" type="button" value="Send" onclick='sendmessage()'/>
</body> <script>
//生成socket对象
//前端发送消息
//var socket = new WebSocket("ws:127.0.0.1:8000/md_admin/test_socket");
//#主动推送消息
var socket = new WebSocket("ws:127.0.0.1:8000/md_admin/test_websocket");
socket.onopen = function () {
console.log('WebSocket open');//成功连接上Websocket
};
socket.onmessage = function (e) {
console.log(e.data)
alert($.parseJSON(e.data).contnet);//打印服务端返回的数据
};
socket.onclose=function(e){
console.log(e);
socket.close(); //关闭TCP连接
};
if (socket.readyState == WebSocket.OPEN){
socket.onopen();
}
window.s = socket;
function sendmessage(){
window.s.send(document.getElementById("chat-message-input").value);
}
</script>
Django2.0.4 + websocket 实现实时通信,主动推送,聊天室及客服系统的更多相关文章
- 为美多商城(Django2.0.4)添加基于websocket的实时通信,主动推送,聊天室及客服系统
原文转载自「刘悦的技术博客」https://v3u.cn/a_id_67 websocket是个啥? webSocket是一种在单个TCP连接上进行全双工通信的协议 webSocket使得客户端和服务 ...
- spring boot 集成 websocket 实现消息主动推送
spring boot 集成 websocket 实现消息主动 前言 http协议是无状态协议,每次请求都不知道前面发生了什么,而且只可以由浏览器端请求服务器端,而不能由服务器去主动通知浏览器端,是单 ...
- 基于Tomcat7、Java、WebSocket的服务器推送聊天室
http://blog.csdn.net/leecho571/article/details/9707497 http://blog.fens.me/java-websocket-intro/ jav ...
- Tomcat学习总结(4)——基于Tomcat7、Java、WebSocket的服务器推送聊天室
前言 HTML5 WebSocket实现了服务器与浏览器的双向通讯,双向通讯使服务器消息推送开发更加简单,最常见的就是即时通讯和对信息实时性要求比较高的应用.以前的服务器消息推送大 ...
- 后端Python3+Flask结合Socket.io配合前端Vue2.0实现简单全双工在线客服系统
原文转载自「刘悦的技术博客」https://v3u.cn/a_id_158 在之前的一篇文章中:为美多商城(Django2.0.4)添加基于websocket的实时通信,主动推送,聊天室及客服系统,详 ...
- DT7.0主动推送当天高质量图片数据到熊掌号展现
<?php /* 百度当天主动推送熊掌功能 作者:68喜科技 用于:DT7.0 功能模块:优质内容推送熊掌*出图内容当天推送 */ //引入全局变量函数 defined('IN_DESTOON' ...
- dt7.0百度熊掌当天主动推送方法
因自己没事新做了一个网站,申请了一个熊掌号,所以做了这个主动推送接口,希望能收录快些,在此分享下关于DT7.0主动当天推送功能 上代码: <?php /* 百度当天主动推送熊掌功能 作者:68喜 ...
- DT7.0/6.0最简单实现主动推送方法
最近研究destoon内核开发,开发了一个大型的信息站点:http://www.xuetong365.com/ 但是新站如何提高收录和排名呢?网上有很多主动提交的方法,今天我分享一个自己原创的超级简 ...
- 【SpringBoot】服务器端主动推送SSE技术讲解
=====================16.高级篇幅之SpringBoot2.0服务器端主动推送SSE技术讲解 ============================ 1.服务端推送常用技术介绍 ...
随机推荐
- CEC和ARC介绍
众所周知,HDMI作为一个数字化视频音频的接收标准,是可以同时传输视频和音频的,当然随着HDMI版本的提升,它的功能也一直在增强.事实上 当HDMI升级到1.3时,人们就发现了HDMI多了一个CEC功 ...
- mysql慢日志, 锁表情况查询
2018-5-29 9:10:15 星期二 锁表情况查询: show OPEN TABLES where In_use > ; 慢日志记录: 1. 修改配置文件, 重启服务后永久生效 slow_ ...
- java.lang.ClassNotFoundException: org.springframework.http.converter.json.MappingJacksonHttpMessageConverter
原因是Spring 3.x 和4.X处理JSON的一个类不一样,而这个东西又配置在xml文件中,所以编译时又无法发现 spring3.x是org.springframework.http.conver ...
- Python的单例模式
一.何为单例模式 单例模式:保证一个类仅有一个实例,并提供一个访问他的全局访问点. 实现某个类只有一个实例的途径: 1.让一个全局变量使得一个对象被访问,但是他不能防止外部实例化多个对象. 2.让类自 ...
- Java 模拟http请求
package ln; import java.io.BufferedReader; import java.io.IOException; import java.io.InputStreamRea ...
- Django模型初识
模型层(what.why.how) 模型的相关配置
- selenium webdriver 如何添加cookie
一. webdriver中常用的cookie方法 webdriver中提供了操作cookie的相关方法: get_cookies() 获得cookie信息 add_c ...
- 英语口语练习系列-C40-电器-访友
词汇-电器 dishwasher 洗碗机 fridge 电冰箱 washing machine 洗衣机 mobile phone 手机 digital camera 数码相机 intelligent ...
- selenium基础实例学习
在这里我们通过selenium官方文档做给的实例以及翻译,做出如果代码注释 from selenium import webdriverfrom selenium.webdriver.common ...
- JavaScript(四)
条件语句 通过条件来控制程序的走向,就需要用到条件语句. 运算符 1.算术运算符: +(加). -(减). *(乘). /(除). %(求余)2.赋值运算符:=. +=. -=. *=. /=. %= ...