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中下划线的使用方法
Mar 27 Python
Python实现Sqlite将字段当做索引进行查询的方法
Jul 21 Python
关于python pyqt5安装失败问题的解决方法
Aug 08 Python
Python设计模式之建造者模式实例详解
Jan 17 Python
python try 异常处理(史上最全)
Mar 07 Python
使用matplotlib中scatter方法画散点图
Mar 19 Python
完美解决python3.7 pip升级 拒绝访问问题
Jul 12 Python
python函数修饰符@的使用方法解析
Sep 02 Python
python 经典数字滤波实例
Dec 16 Python
Python + selenium + crontab实现每日定时自动打卡功能
Mar 31 Python
Python爬虫爬取新闻资讯案例详解
Jul 14 Python
使用python向MongoDB插入时间字段的操作
May 18 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修正代码
2011/05/09 PHP
php selectradio和checkbox默认选择的实现方法详解
2013/06/29 PHP
PHP中批量生成静态html(命令行下运行PHP)
2014/04/19 PHP
php中html_entity_decode实现HTML实体转义
2018/06/13 PHP
php的对象传值与引用传值代码实例讲解
2021/02/26 PHP
JSON为什么那样红为什么要用json(另有洞天)
2012/12/26 Javascript
JavaScript表达式:URL 协议介绍
2013/03/10 Javascript
获取元素距离浏览器周边的位置的方法getBoundingClientRect
2013/04/17 Javascript
javascript实现了照片拖拽点击置顶的照片墙代码
2015/04/03 Javascript
值得分享和收藏的Bootstrap学习教程
2016/05/12 Javascript
输入法的回车与消息发送快捷键回车的冲突解决方法
2016/08/09 Javascript
jquery实现全选、不选、反选的两种方法
2016/09/06 Javascript
javascript 中的事件委托详解
2016/10/25 Javascript
基于wordpress的ajax写法详解
2018/01/02 Javascript
详解Vue.js中.native修饰符
2018/04/24 Javascript
原生js实现Flappy Bird小游戏
2018/12/24 Javascript
JavaScript简单实现动态改变HTML内容的方法示例
2018/12/25 Javascript
浅谈redux, koa, express 中间件实现对比解析
2019/05/23 Javascript
浅谈Vue项目骨架屏注入实践
2019/08/05 Javascript
Vue-cli assets SubDirectory及PublicPath区别详解
2020/08/18 Javascript
py2exe 编译ico图标的代码
2013/03/08 Python
Python中执行存储过程及获取存储过程返回值的方法
2017/10/07 Python
Python利用多线程同步锁实现多窗口订票系统(推荐)
2019/12/22 Python
Django 自定义404 500等错误页面的实现
2020/03/08 Python
AVON雅芳官网:世界上最大的美容化妆品公司之一
2016/11/02 全球购物
英国舒适型鞋履品牌:FitFlop
2017/05/17 全球购物
巴西香水和化妆品购物网站:The Beauty Box
2019/09/03 全球购物
JENNIFER BEHR官网:各种耳环和发饰
2020/06/07 全球购物
SQL Server里面什么样的视图才能创建索引
2015/04/17 面试题
出纳岗位职责范本
2013/12/01 职场文书
新年抽奖获奖感言
2014/03/02 职场文书
体育系毕业生自荐信
2014/06/28 职场文书
教师工作表现评语
2014/12/31 职场文书
上帝也疯狂观后感
2015/06/09 职场文书
Nginx 502 Bad Gateway错误原因及解决方案
2021/03/31 Servers
MySQL系列之六 用户与授权
2021/07/02 MySQL