Django实现websocket
django实现websocket大致上有两种方式,一种channels,一种是dwebsocket。channels依赖于redis,twisted等
一 dwebsocket
1 Django实现Websocket
django实现websocket大致上有两种方式,一种channels,一种是dwebsocket。channels依赖于redis,twisted等,相比之下使用dwebsocket要更为方便一些
2 dwebsocket安装
- pip3 install dwebsocket
3 dwebsocket配置
setting 设置
- INSTALLED_APPS = [
- ...
- ...
- 'dwebsocket'
- ]
- import dwebsocket
- MIDDLEWARE_CLASSES = [
- 'dwebsocket.middleware.WebSocketMiddleware' # 为所有的URL提供websocket,如果只是单独的视图需要可以不选
- ]
- WEBSOCKET_ACCEPT_ALL=True # 可以允许每一个单独的视图实用websockets
urls.py
- 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),
- ]
views.py
- from django.shortcuts import render
- def login(request):
- return render(request, 'index.html')
- from dwebsocket.decorators import accept_websocket
- @accept_websocket
- def path(request):
- if request.is_websocket():
- print(1)
- request.websocket.send('下载完成'.encode('utf-8'))
html
- <body>
- <button onclick="WebSocketTest()">test</button>
- </body>
- <script>
- function WebSocketTest() {
- if ("WebSocket" in window) {
- alert("您的浏览器支持 WebSocket!");
- // 打开一个 web socket
- var ws = new WebSocket("ws://127.0.0.1:8000/path/");
- console.log('ws',ws)
- 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>
4 dwesocket的参数
dwebsocket有两种装饰器:require_websocket和accept_websocekt,使用require_websocket装饰器会导致视图函数无法接收导致正常的http请求,一般情况使用accept_websocket方式就可以了, dwebsocket的一些内置方法: request.is_websocket():判断请求是否是websocket方式,是返回true,否则返回false request.websocket():当请求为websocket的时候,会在request中增加一个websocket属性, WebSocket.wait():返回客户端发送的一条消息,没有收到消息则会导致阻塞 WebSocket.read() 和wait一样可以接受返回的消息,只是这种是非阻塞的,没有消息返回None WebSocket.count_messages():返回消息的数量 WebSocket.has_messages():返回是否有新的消息过来 WebSocket.send(msg):像客户端发送消息,message为byte类型 |
二 channels
1 channels在pypi上可以用以下代码安装
- pip3 install -U channels
2.settings配置
一旦你安装了,你应该添加 channels 到您的 INSTALLED_APPS
- INSTALLED_APPS = [
- 'django.contrib.admin',
- 'django.contrib.auth',
- ...
...
- 'channels',
- ]
还有要添加
- ASGI_APPLICATION = "django_channels_demo.routing.application"
3. 创建websocket应用和路由
我们将从一个空的路由配置开始。创建一个文件,项目名/routing.py
并包含以下代码:
- # 项目名/routing.py
- from channels.routing import ProtocolTypeRouter
- application = ProtocolTypeRouter({
- # (http->django views is added by default)
- })
后面就可以啦启动了
详见官网
Django实现websocket的更多相关文章
- Django实现websocket完成实时通讯,聊天室,在线客服等
一 什么是Websocket WebSocket是一种在单个TCP连接上进行全双工通信的协议 WebSocket使得客户端和服务器之间的数据交换变得更加简单,允许服务端主动向客户端推送数据.在WebS ...
- Django实现websocket完成实时通讯、聊天室、在线客服等
一 什么是Websocket WebSocket是一种在单个TCP连接上进行全双工通信的协议 WebSocket使得客户端和服务器之间的数据交换变得更加简单,允许服务端主动向客户端推送数据.在WebS ...
- django 实现websocket
一.简述:django实现websocket,之前django-websocket退出到3.0之后,被废弃.官方推荐大家使用channels. channels通过升级http协议 升级到websoc ...
- Django实现websocket完成实时通讯
一 什么是Websocket WebSocket是一种在单个TCP连接上进行全双工通信的协议 WebSocket使得客户端和服务器之间的数据交换变得更加简单,允许服务端主动向客户端推送数据.在WebS ...
- IronFort---基于Django和Websocket的堡垒机
WebSSH有很多,基于Django的Web服务也有很多,使用Paramiko在Python中进行SSH访问的就更多了.但是通过gevent将三者结合起来,实现通过浏览器访问的堡垒机就很少见了.本文将 ...
- Django用websocket实现聊天室之筑基篇
最近闲来无事,无意发现一个聊天室的前端UI,看着挺好看的但是没有聊天室的通信代码,于是想给它安装电池(通信部分),先看UI: 开始通信部分的工作: 使用的组件: Django1.11.13 chann ...
- Django配置websocket请求接口
1.settings.py INSTALLED_APPS = [ '...', 'channels', '...', ] ASGI_APPLICATION = 'server.routing.appl ...
- 11 Django实现WebSocket
因为需要实时显示状态的需求,想到了websocket,但是Django原生不支持websocket,后来搜索到了chango-channels项目,可以实现次需求. 一.Channels 官方文档 二 ...
- 开发基于Django和Websocket的堡垒机
WebSSH有很多,基于Django的Web服务也有很多,使用Paramiko在Python中进行SSH访问的就更多了.但是通过gevent将三者结合起来,实现通过浏览器访问的堡垒机就很少见了.本文将 ...
随机推荐
- 不要在PHP7中踩这些坑
PHP是当今仍然是最流行的Web开发语言,目前在所有使用服务端编程语言的网站中,超过83%的站点在使用PHP.PHP7在性能方面实现跨越式的提升,然后有些坑我们还是要提醒PHPer不要踩. 1. 不要 ...
- 【rabbitmq】Queueingconsumer被废止后老代码如何做的解决方案
amqp-client 3.x之前的rabbitmq版本有个消费者的写法是借助于Queueingconsumer的: QueueingConsumer consumer = new QueueingC ...
- 7.2 Varnish 模式
- 1-8SpringBoot之切面AOP
SpringBoot提供了强大AOP支持,我们前面讲解过AOP面向切面,所以这里具体AOP原理就补具体介绍: AOP切面主要是切方法,我们一般搞一些日志分析和事务操作,要用到切面,类似拦截器: @As ...
- vue 中使用 echarts 自适应问题
echarts 自带的自适应方法 resize() 具体用法: let xxEcharts = this.$echarts.init(document.getElementById('xxx')) ...
- 把自己的项目发布到maven仓库并在maven和gradle中开始使用
把自己的项目发布到maven仓库并在maven和gradle中开始使用 上一条博客中提到的日志打印项目总算是维护的差不多了, 不过现在使用它还是打成jar包放到其他项目内, 所以决定把项目传到mave ...
- Java日志相关概述
日志是代码调试.生产运维必备工具,基本所有软件都会有日志记录. 1.常用日志框架介绍 1.Logging jdk1.5自带日志工具类,位于java.util.logging; 2.Log4j 市场占有 ...
- 0105 springMVC开发基础
背景 已经明确了MVC的思想和SpringMVC的基本流程,下面就都具体的mvc开发细节知识了. @RequestMapping springMVC核心流程中,启动阶段会把注解@RequeestMap ...
- C++远征--jame_yuan(慕课网)
int &a=b;引用符 int const a = 3; int *p = &a; 只读 不能 赋给 读写 有默认参数值得参数必须在参数表的最右端 void fun(int ...
- NO15 第一关课后考试
第一关课后考试: 1.创建目录/data/oldboy,并且在该目录下创建文件oldboy.txt,然后在文件oldboy.txt里写如内容:inet addr:10.0.0.8 Bcast:10.0 ...