一 什么是Websocket

WebSocket是一种在单个TCP连接上进行全双工通信的协议

WebSocket使得客户端和服务器之间的数据交换变得更加简单,允许服务端主动向客户端推送数据。在WebSocket API中,浏览器和服务器只需要完成一次握手,两者之间就直接可以创建持久性的连接,并进行双向数据传输

现在,很多网站为了实现推送技术,所用的技术都是轮询。轮询是在特定的的时间间隔(如每1秒),由浏览器对服务器发出HTTP请求,然后由服务器返回最新的数据给客户端的浏览器。这种传统的模式带来很明显的缺点,即浏览器需要不断的向服务器发出请求,然而HTTP请求可能包含较长的头部,其中真正有效的数据可能只是很小的一部分,显然这样会浪费很多的带宽等资源。
而比较新的技术去做轮询的效果是Comet。这种技术虽然可以双向通信,但依然需要反复发出请求。而且在Comet中,普遍采用的长链接,也会消耗服务器资源。

在这种情况下,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完成实时通讯,聊天室,在线客服等相关推荐

  1. 使用node.js和Socket创建实时通讯聊天室。

    长连接:客户端向服务器段发请求建立链接,一旦建立成功,客户端就可以向服务器发送数据,服务器接受并处理,返回相应后连接不断开. 优点:实时通讯, 短连接:客户端向服务器发送建立连接,一旦建立成功,客户端 ...

  2. SpringBoot WebSocket之多人聊天室实现

    SpringBoot WebSocket之多人聊天室实现 WebSocket简介 什么是WebSocket? 为什么使用WebSocket? WebSocket的技术特点: WebSocket的技术优 ...

  3. 教你从零开始用WebSocket打造一个IM聊天室

    之前我们在 IM即时聊天室(一):WebSocket 和 IM即时聊天室(二): Socket.io + Node.js 两篇文章中介绍了搭建一个IM的所需的技术栈和通信原理.那在这篇文章里我们就来详 ...

  4. SpringBoot入门建站全系列(二十七)WebSocket做简单的聊天室

    SpringBoot入门建站全系列(二十七)WebSocket做简单的聊天室 一.概述 WebSocket 是一种网络通信协议.RFC6455 定义了它的通信标准. WebSocket 是 HTML5 ...

  5. 基于Linux下的即时通讯聊天室项目(全代码 有注释 可直接运行)

    基于Linux下的即时通讯聊天室项目 一.序言 二.具体功能 三.系统客户要求 四.具体代码 1.服务器代码 2.客户端代码 一.序言 最近在写一个基于Linux下的聊天工具 它适合于局域网内所有人进 ...

  6. html5在线客服源码 websocket c#实现, im 即时通讯 完整的源代码,在线聊天

    html5在线客服源码 websocket c#实现,可扩展 im 即时通讯 在线客服系统源代码,客户端使用 websocket实现,服务器端使用C#实现,完整的源代码.可扩展性强根据自己的需求灵活扩 ...

  7. 使用Node+websocket实现简易1v1聊天室(前端+服务器)

    使用Node+websocket实现简易1v1聊天室(前端+服务器) 前提: 安装好node环境~~~ 可使用 node -v 和 npm -v 查看是否装好 实现逻辑: 用户A 用户B 服务器 用户 ...

  8. SpringBoot集成WebSocket实现及时通讯聊天功能!!!

    1:在SpringBoot的pom.xml文件里添加依赖: <!-- websocket --> <dependency><groupId>org.springfr ...

  9. html5 websocket java 聊天室_如何利用WebSocket实现网页版聊天室

    花了将近一周的时间终于完成了利用WebSocket完成网页版聊天室这个小demo,期间还走过了一段"看似弯曲"的道路,但是我想其实也不算是弯路吧,因为你走过的路必将留下你的足迹.这 ...

  10. Nodejs+webSocket搭建多人聊天室

    NodeJs+webSocket搭建多人聊天室 准备的东西: 第一步:安装插件并且完善服务端 第二步 :搭建客户端并与服务端的通信 第三步 :添加CSS样式 第四步:总结 今天花了一个上午的时间去学习 ...

最新文章

  1. 13亿参数,无标注预训练实现SOTA:Facebook提出自监督CV新模型
  2. Myeclipse 10 使用之修改字体
  3. Python目录下中没有Script文件夹
  4. c/c++教程 - 2.2 引用的使用方法,引用做函数参数,引用做返回值,引用的本质,常量引用
  5. hadoop(2.5) 分布式部署
  6. 巧妙利用Mac标记,分类同类文件的技巧
  7. 区块链 FISCO BCOS学习文章(1)-平台介绍
  8. 深入浅出Python机器学习3——K最近邻算法
  9. Rasa课程、Rasa培训、Rasa面试系列之:Rasa客户案例Dialogue公司
  10. java毕业设计_员工绩效考评系统
  11. 【WIFI专题】Wifi 2.4G及5G频段各信道的中心频率及主要国家的分布情况
  12. CTF中字符长度限制下的命令执行 rce(7字符5字符4字符)汇总
  13. 被开发者和合作商抛弃 Android难现昨日辉煌
  14. 四大名著丨折射中国人性的四面镜子
  15. 使用arduino驱动光驱步进电机
  16. 读《春秋》有感之八:荀罃设计车轮战
  17. 小程序如期而至,赶快看看有哪些好玩的小程序吧
  18. mysql查询名字叫小明的_MySQL(命令和查询语句)
  19. 两个向量组的秩相等说明什么_若两个向量组等价,它们的秩是否相等?
  20. Ubuntu 命令行连接wifi

热门文章

  1. RocketMQ(十六)RocketMQ消息存储机制
  2. Mybatis原理解析(四)--查询流程
  3. 通过JDBC连接Oracle数据库中的十大技巧
  4. [Android Pro] 组件化:企业级大型项目必经之路
  5. QUnit 5分钟教程
  6. Omi教程-生命周期和事件处理
  7. 网站SEO优化之Robots.txt文件写法。
  8. 讨论一下c++中由外部os向主线程中传入参数的问题
  9. phpMyAdmin安装配置方法全过程,及问题解决
  10. Summarize 2014 Look Ahead 2015