Django通过dwebsocket实现websocket的例子


Posted in Python onNovember 15, 2019

与django推荐的channel不同,dwebsocket使用更加方便简单

使用方法1:

只需views.py文件中,将对应的视图函数添加装饰器

accept_websocket-—可以接受websocket请求和普通http请求
require_websocket----只接受websocket请求,拒绝普通http请求
from dwebsocket.decorators import accept_websocket,require_websocket

@accept_websocket
def test_websocket(request):
  if request.is_websocket():
    while 1:
      time.sleep(1) ## 向前端发送时间
      dit = {
        'time':time.strftime('%Y.%m.%d %H:%M:%S',time.localtime(time.time()))
      }
      request.websocket.send(json.dumps(dit))

使用方法2:

使用中间件

步骤:

1. settings.py文件中,添加如下信息

import dwebsocket
# 为所有的URL提供websocket,如果只是单独的视图需要可以不选
MIDDLEWARE_CLASSES=['dwebsocket.middleware.WebSocketMiddleware']

WEBSOCKET_ACCEPT_ALL=True # 可以允许每一个单独的视图实用websockets

官方说明:做了如上配置,仍然会拒绝普通视图的websockets。所以必须在视图上设置' accept_websocket ' '属性来允许websockets,所以继续做如下配置。

2. views.py文件中,相关视图添加装饰器

from dwebsocket.decorators import accept_websocket,require_websocket

@accept_websocket
def test_websocket(request):
  if request.is_websocket():
    while 1:
      time.sleep(1) ## 向前端发送时间
      dit = {
        'time':time.strftime('%Y.%m.%d %H:%M:%S',time.localtime(time.time()))
      }
      request.websocket.send(json.dumps(dit))

看起来跟方法一没什么区别,还多了一步settings配置,但是区别在哪呢???

官方是这么说的:These attributes are always available if you use the middleware

翻译过来就是,如果使用中间件,有以下这下方法可用:

request.is_websocket() #websocket请求返回True,普通请求返回False
request.websocket # websocket建立连接后,request将有websocket提供的相关api属性,如果没有建立连接则是None
WebSocket.wait() # 阻塞接收消息
WebSocket.read() # 非阻塞接收消息
WebSocket.count_messages() #返回队列中的消息数量
WebSocket.has_messages() # 有消息返回True,反之False
WebSocket.send(message) # 发送消息
WebSocket.__iter__() # 当迭代器使用

官方链接

以上这篇Django通过dwebsocket实现websocket的例子就是小编分享给大家的全部内容了,希望能给大家一个参考,也希望大家多多支持三水点靠木。

Python 相关文章推荐
python使用urllib2实现发送带cookie的请求
Apr 28 Python
Python2.x版本中基本的中文编码问题解决
Oct 12 Python
Python保存MongoDB上的文件到本地的方法
Mar 16 Python
Python学习小技巧之列表项的推导式与过滤操作
May 20 Python
python中kmeans聚类实现代码
Feb 23 Python
对python使用http、https代理的实例讲解
May 07 Python
python实现决策树分类
Aug 30 Python
Python实现求两个数组交集的方法示例
Feb 23 Python
Django url,从一个页面调到另个页面的方法
Aug 21 Python
python GUI库图形界面开发之PyQt5动态加载QSS样式文件
Feb 25 Python
python实现发送带附件的邮件代码分享
Sep 22 Python
Python字符串的15个基本操作(小结)
Feb 03 Python
Python numpy线性代数用法实例解析
Nov 15 #Python
Django中提示消息messages的设置方式
Nov 15 #Python
调用其他python脚本文件里面的类和方法过程解析
Nov 15 #Python
Django实现简单网页弹出警告代码
Nov 15 #Python
使用Python函数进行模块化的实现
Nov 15 #Python
Python argparse模块应用实例解析
Nov 15 #Python
Django使用消息提示简单的弹出个对话框实例
Nov 15 #Python
You might like
PHP微信开发之微信录音临时转永久存储
2018/01/26 PHP
PHP中__set()实例用法和基础讲解
2019/07/23 PHP
解决在laravel中leftjoin带条件查询没有返回右表为NULL的问题
2019/10/15 PHP
js URL参数的拼接方法比较
2012/02/15 Javascript
bootstrap data与jquery .data
2014/07/07 Javascript
jQuery实现当前页面标签高亮显示的方法
2015/03/10 Javascript
再谈javascript常见错误及解决方法
2016/09/16 Javascript
详解AngularJS ng-class样式切换
2017/06/27 Javascript
JavaScript字符串_动力节点Java学院整理
2017/06/27 Javascript
[js高手之路]图解javascript的原型(prototype)对象,原型链实例
2017/08/28 Javascript
静态页面实现 include 引入公用代码的示例
2017/09/25 Javascript
vue中配置mint-ui报css错误问题的解决方法
2017/10/11 Javascript
ng-alain表单使用方式详解
2018/07/10 Javascript
详解webpack4.x之搭建前端开发环境
2019/03/28 Javascript
vue+elementUI实现表格关键字筛选高亮
2020/10/26 Javascript
JavaScript工具库之Lodash详解
2019/06/15 Javascript
Vue开发环境跨域访问问题
2020/01/22 Javascript
vue中element 的upload组件发送请求给后端操作
2020/09/07 Javascript
Python3基础之基本运算符概述
2014/08/13 Python
python实现按任意键继续执行程序
2016/12/30 Python
Python机器学习之决策树算法
2017/12/22 Python
pyqt5中QThread在使用时出现重复emit的实例
2019/06/21 Python
python3 图片 4通道转成3通道 1通道转成3通道 图片压缩实例
2019/12/03 Python
如何用Anaconda搭建虚拟环境并创建Django项目
2020/08/02 Python
美国老牌主机服务商:iPage
2016/07/22 全球购物
建筑学推荐信
2013/11/03 职场文书
应届生程序员求职信
2013/11/05 职场文书
运动会方阵解说词
2014/02/12 职场文书
优秀医生事迹材料
2014/02/12 职场文书
小学竞选班干部演讲稿
2014/08/20 职场文书
大学本科生职业生涯规划书范文
2014/09/14 职场文书
迟到检讨书2000字(精选篇)
2014/10/07 职场文书
学校党的群众路线教育实践活动制度建设计划
2014/11/03 职场文书
2015年财务部年度工作总结
2015/05/19 职场文书
PHP中strval()函数实例用法
2021/06/07 PHP
python运算符之与用户交互
2022/04/13 Python