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的Django框架中的模版相关知识
Jul 15 Python
Python 实现一个颜色色值转换的小工具
Dec 06 Python
Python 常用 PEP8 编码规范详解
Jan 22 Python
Python使用Scrapy爬虫框架全站爬取图片并保存本地的实现代码
Mar 04 Python
django框架自定义用户表操作示例
Aug 07 Python
利用Python将文本中的中英文分离方法
Oct 31 Python
Python使用import导入本地脚本及导入模块的技巧总结
Aug 07 Python
解决Django中调用keras的模型出现的问题
Aug 07 Python
Python如何使用正则表达式爬取京东商品信息
Jun 01 Python
Python如何绘制日历图和热力图
Aug 07 Python
Python  Asyncio模块实现的生产消费者模型的方法
Mar 01 Python
python 如何将两个实数矩阵合并为一个复数矩阵
May 19 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 类型转换函数intval
2009/06/20 PHP
ajax完美实现两个网页 分页功能的实例代码
2013/04/16 PHP
PHP统计二维数组元素个数的方法
2013/11/12 PHP
php文件上传简单实现方法
2015/01/24 PHP
php动态添加url查询参数的方法
2015/04/14 PHP
jquery与google map api结合使用 控件,监听器
2010/03/04 Javascript
判断浏览器的javascript版本的代码
2010/09/03 Javascript
解析JavaScript中delete操作符不能删除的对象
2013/12/03 Javascript
jquery绑定事件不生效的解决方法
2014/02/11 Javascript
jQuery如何将选中的对象转化为原始的DOM对象
2014/06/09 Javascript
js实现按钮控制图片360度翻转特效的方法
2015/02/17 Javascript
jquery如何获取元素的滚动条高度等实现代码
2015/10/19 Javascript
JavaScript的instanceof运算符学习教程
2016/06/08 Javascript
微信小程序之picker日期和时间选择器
2017/02/09 Javascript
Vue.js上下滚动加载组件的实例代码
2017/07/17 Javascript
详解vue中移动端自适应方案
2019/05/05 Javascript
初步剖析C语言编程中的结构体
2016/01/16 Python
python版本坑:md5例子(python2与python3中md5区别)
2017/06/20 Python
Python 实现数据库更新脚本的生成方法
2017/07/09 Python
python excel转换csv代码实例
2019/08/26 Python
解决Keras中Embedding层masking与Concatenate层不可调和的问题
2020/06/18 Python
推荐值得学习的12款python-web开发框架
2020/08/10 Python
HTML5触摸事件演化tap事件介绍
2016/03/25 HTML / CSS
移动HTML5前端框架—MUI的使用
2017/12/18 HTML / CSS
公司财务总监岗位职责
2013/12/14 职场文书
高中生的自我评价
2014/03/04 职场文书
面试自我介绍演讲稿
2014/04/29 职场文书
我爱我家教学反思
2014/05/01 职场文书
施工单位安全责任书
2014/07/24 职场文书
2014年管理工作总结
2014/11/22 职场文书
毕业实习指导教师评语
2014/12/31 职场文书
秋菊打官司观后感
2015/06/03 职场文书
阿凡达观后感
2015/06/10 职场文书
护理工作心得体会
2016/01/22 职场文书
Sql Server之数据类型详解
2022/02/28 SQL Server
vue el-table实现递归嵌套的示例代码
2022/08/14 Vue.js