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计算程序开始到程序结束的运行时间和程序运行的CPU时间
Nov 28 Python
python脚本设置超时机制系统时间的方法
Feb 21 Python
Python win32com 操作Exce的l简单方法(必看)
May 25 Python
python交互式图形编程实例(二)
Nov 17 Python
Python定时发送消息的脚本:每天跟你女朋友说晚安
Oct 21 Python
Windows10下Tensorflow2.0 安装及环境配置教程(图文)
Nov 21 Python
python列表切片和嵌套列表取值操作详解
Feb 27 Python
Python基础类继承重写实现原理解析
Apr 03 Python
基于python和flask实现http接口过程解析
Jun 15 Python
Python实现图片查找轮廓、多边形拟合、最小外接矩形代码
Jul 14 Python
用ldap作为django后端用户登录验证的实现
Dec 07 Python
python绘图模块之利用turtle画图
Feb 12 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
全国FM电台频率大全 - 27 陕西省
2020/03/11 无线电
PHP zlib扩展实现页面GZIP压缩输出
2010/06/17 PHP
php循环语句 for()与foreach()用法区别介绍
2012/09/05 PHP
解析如何在PHP下载文件名中解决乱码的问题
2013/06/20 PHP
destoon安装出现Internal Server Error的解决方法
2014/06/21 PHP
php实现背景图上添加圆形logo图标的方法
2016/11/17 PHP
关于PHP5.6+版本“No input file specified”问题的解决
2019/12/11 PHP
防止动态加载JavaScript引起的内存泄漏问题
2009/10/08 Javascript
基于JQUERY的两个ListBox子项互相调整的实现代码
2011/05/07 Javascript
裁剪字符串trim()自定义改进版
2013/04/10 Javascript
Javascript中的默认参数详解
2014/10/22 Javascript
使用 TypeScript 重新编写的 JavaScript 坦克大战游戏代码
2015/04/07 Javascript
js定时器实现倒计时效果
2017/11/05 Javascript
vue 全选与反选的实现方法(无Bug 新手看过来)
2018/02/09 Javascript
webstrom Debug 调试vue项目的方法步骤
2018/07/17 Javascript
layui-select动态选中值的例子
2019/09/23 Javascript
nodejs使用socket5进行代理请求的实现
2020/02/21 NodeJs
Electron 打包问题:electron-builder 下载各种依赖出错(推荐)
2020/07/09 Javascript
JS实现简易日历效果
2021/01/25 Javascript
使用python编写android截屏脚本双击运行即可
2014/07/21 Python
Python生成密码库功能示例
2017/05/23 Python
Python实现的下载网页源码功能示例
2017/06/13 Python
Random 在 Python 中的使用方法
2018/08/09 Python
python实现与redis交互操作详解
2020/04/21 Python
python读取图像矩阵文件并转换为向量实例
2020/06/18 Python
美国在线和移动免费会员制批发零售商:Boxed(移动端的Costco)
2020/01/02 全球购物
一道SQL存储过程面试题
2016/10/07 面试题
《乌鸦和狐狸》教学反思
2014/02/08 职场文书
小学英语教师先进事迹
2014/05/28 职场文书
中职招生先进个人材料
2014/08/31 职场文书
简单租房协议书
2014/10/21 职场文书
机关班子查摆问题及整改措施
2014/10/28 职场文书
2014年政府采购工作总结
2014/12/09 职场文书
2015年预算员工作总结
2015/05/14 职场文书
员工考勤管理制度
2015/08/06 职场文书
Nginx+Windows搭建域名访问环境的操作方法
2022/03/17 Servers