Django实现websocket完成实时通讯,聊天室,在线客服等
一 什么是Websocket
WebSocket是一种在单个TCP连接上进行全双工通信的协议
WebSocket使得客户端和服务器之间的数据交换变得更加简单,允许服务端主动向客户端推送数据。在WebSocket API中,浏览器和服务器只需要完成一次握手,两者之间就直接可以创建持久性的连接,并进行双向数据传输
在这种情况下,HTML5定义了WebSocket协议,能更好的节省服务器资源和带宽,并且能够更实时地进行通讯
二 Django实现Websocket
django实现websocket大致上有两种方式,一种channels,一种是dwebsocket。channels依赖于redis,twisted等,相比之下使用dwebsocket要更为方便一些
三 dwebsocket安装
pip3 install dwebsocket
四 dwebsocket配置
INSTALLED_APPS = [..........'dwebsocket', ]MIDDLEWARE_CLASSES = [............'dwebsocket.middleware.WebSocketMiddleware' # 为所有的URL提供websocket,如果只是单独的视图需要可以不选 ] WEBSOCKET_ACCEPT_ALL=True # 可以允许每一个单独的视图实用websockets
五 使用
html代码:
<!DOCTYPE html> <html lang="en"> <head><meta charset="UTF-8"><title>Title</title> </head> <body><button onclick="WebSocketTest()">test</button> </body><script>function WebSocketTest() {alert(1)if ("WebSocket" in window) {alert("您的浏览器支持 WebSocket!");// 打开一个 web socket ws = new WebSocket("ws://127.0.0.1:8000/path/");ws.onopen = function () {// Web Socket 已连接上,使用 send() 方法发送数据 ws.send("发送数据");alert("数据发送中...");};ws.onmessage = function (evt) {var received_msg = evt.data;alert("数据已接收...");alert("数据:" + received_msg)};ws.onclose = function () {// 关闭 websocket alert("连接已关闭...");};}else {// 浏览器不支持 WebSocket alert("您的浏览器不支持 WebSocket!");}}</script> </html>
View Code
views视图层:
from django.shortcuts import render,HttpResponse# Create your views here. def login(request):return render(request,'login.html')from dwebsocket.decorators import accept_websocket @accept_websocket def path(request):if request.is_websocket():print(1)request.websocket.send('下载完成'.encode('utf-8'))
View Code
路由层:
from django.conf.urls import url from django.contrib import admin from app01 import views urlpatterns = [url(r'^admin/', admin.site.urls),url(r'^login/', views.login),url(r'^path/', views.path), ]
View Code
六 详解
dwebsocket有两种装饰器:require_websocket和accept_websocekt,使用require_websocket装饰器会导致视图函数无法接收导致正常的http请求,一般情况使用accept_websocket方式就可以了, dwebsocket的一些内置方法: request.is_websocket():判断请求是否是websocket方式,是返回true,否则返回falserequest.websocket: 当请求为websocket的时候,会在request中增加一个websocket属性,WebSocket.wait() 返回客户端发送的一条消息,没有收到消息则会导致阻塞WebSocket.read() 和wait一样可以接受返回的消息,只是这种是非阻塞的,没有消息返回NoneWebSocket.count_messages()返回消息的数量WebSocket.has_messages()返回是否有新的消息过来WebSocket.send(message)像客户端发送消息,message为byte类型
转载于:https://www.cnblogs.com/liuqingzheng/p/10151572.html
Django实现websocket完成实时通讯,聊天室,在线客服等相关推荐
- 使用node.js和Socket创建实时通讯聊天室。
长连接:客户端向服务器段发请求建立链接,一旦建立成功,客户端就可以向服务器发送数据,服务器接受并处理,返回相应后连接不断开. 优点:实时通讯, 短连接:客户端向服务器发送建立连接,一旦建立成功,客户端 ...
- SpringBoot WebSocket之多人聊天室实现
SpringBoot WebSocket之多人聊天室实现 WebSocket简介 什么是WebSocket? 为什么使用WebSocket? WebSocket的技术特点: WebSocket的技术优 ...
- 教你从零开始用WebSocket打造一个IM聊天室
之前我们在 IM即时聊天室(一):WebSocket 和 IM即时聊天室(二): Socket.io + Node.js 两篇文章中介绍了搭建一个IM的所需的技术栈和通信原理.那在这篇文章里我们就来详 ...
- SpringBoot入门建站全系列(二十七)WebSocket做简单的聊天室
SpringBoot入门建站全系列(二十七)WebSocket做简单的聊天室 一.概述 WebSocket 是一种网络通信协议.RFC6455 定义了它的通信标准. WebSocket 是 HTML5 ...
- 基于Linux下的即时通讯聊天室项目(全代码 有注释 可直接运行)
基于Linux下的即时通讯聊天室项目 一.序言 二.具体功能 三.系统客户要求 四.具体代码 1.服务器代码 2.客户端代码 一.序言 最近在写一个基于Linux下的聊天工具 它适合于局域网内所有人进 ...
- html5在线客服源码 websocket c#实现, im 即时通讯 完整的源代码,在线聊天
html5在线客服源码 websocket c#实现,可扩展 im 即时通讯 在线客服系统源代码,客户端使用 websocket实现,服务器端使用C#实现,完整的源代码.可扩展性强根据自己的需求灵活扩 ...
- 使用Node+websocket实现简易1v1聊天室(前端+服务器)
使用Node+websocket实现简易1v1聊天室(前端+服务器) 前提: 安装好node环境~~~ 可使用 node -v 和 npm -v 查看是否装好 实现逻辑: 用户A 用户B 服务器 用户 ...
- SpringBoot集成WebSocket实现及时通讯聊天功能!!!
1:在SpringBoot的pom.xml文件里添加依赖: <!-- websocket --> <dependency><groupId>org.springfr ...
- html5 websocket java 聊天室_如何利用WebSocket实现网页版聊天室
花了将近一周的时间终于完成了利用WebSocket完成网页版聊天室这个小demo,期间还走过了一段"看似弯曲"的道路,但是我想其实也不算是弯路吧,因为你走过的路必将留下你的足迹.这 ...
- Nodejs+webSocket搭建多人聊天室
NodeJs+webSocket搭建多人聊天室 准备的东西: 第一步:安装插件并且完善服务端 第二步 :搭建客户端并与服务端的通信 第三步 :添加CSS样式 第四步:总结 今天花了一个上午的时间去学习 ...
最新文章
- 13亿参数,无标注预训练实现SOTA:Facebook提出自监督CV新模型
- Myeclipse 10 使用之修改字体
- Python目录下中没有Script文件夹
- c/c++教程 - 2.2 引用的使用方法,引用做函数参数,引用做返回值,引用的本质,常量引用
- hadoop(2.5) 分布式部署
- 巧妙利用Mac标记,分类同类文件的技巧
- 区块链 FISCO BCOS学习文章(1)-平台介绍
- 深入浅出Python机器学习3——K最近邻算法
- Rasa课程、Rasa培训、Rasa面试系列之:Rasa客户案例Dialogue公司
- java毕业设计_员工绩效考评系统
- 【WIFI专题】Wifi 2.4G及5G频段各信道的中心频率及主要国家的分布情况
- CTF中字符长度限制下的命令执行 rce(7字符5字符4字符)汇总
- 被开发者和合作商抛弃 Android难现昨日辉煌
- 四大名著丨折射中国人性的四面镜子
- 使用arduino驱动光驱步进电机
- 读《春秋》有感之八:荀罃设计车轮战
- 小程序如期而至,赶快看看有哪些好玩的小程序吧
- mysql查询名字叫小明的_MySQL(命令和查询语句)
- 两个向量组的秩相等说明什么_若两个向量组等价,它们的秩是否相等?
- Ubuntu 命令行连接wifi