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 20 Python
在Python中使用lambda高效操作列表的教程
Apr 24 Python
Python随机生成数据后插入到PostgreSQL
Jul 28 Python
利用Python爬取可用的代理IP
Aug 18 Python
tensorflow学习教程之文本分类详析
Aug 07 Python
关于TensorFlow新旧版本函数接口变化详解
Feb 10 Python
python GUI库图形界面开发之PyQt5动态加载QSS样式文件
Feb 25 Python
python爬虫开发之Beautiful Soup模块从安装到详细使用方法与实例
Mar 09 Python
Django mysqlclient安装和使用详解
Sep 17 Python
pandas抽取行列数据的几种方法
Dec 13 Python
python通用数据库操作工具 pydbclib的使用简介
Dec 21 Python
Python机器学习算法之决策树算法的实现与优缺点
May 13 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中autoload的用法总结
2013/11/08 PHP
Codeigniter框架实现获取分页数据和总条数的方法
2014/12/05 PHP
Zend Framework教程之Loader以及PluginLoader用法详解
2016/03/09 PHP
CodeIgniter连贯操作的底层原理分析
2016/05/17 PHP
示例详解Laravel重置密码代码重构
2016/08/10 PHP
基于php解决json_encode中文UNICODE转码问题
2020/11/10 PHP
js window.onload 加载多个函数的方法
2009/11/02 Javascript
JS getMonth()日期函数的值域是0-11
2010/02/15 Javascript
JavaScript和CSS通过expression实现Table居中显示
2013/06/28 Javascript
JS获取Table中td值的方法
2015/03/19 Javascript
基于jquery实现全屏滚动效果
2015/11/26 Javascript
Javascript技术栈中的四种依赖注入详解
2016/02/23 Javascript
js实现彩色条纹滚动条效果
2017/03/15 Javascript
详解nodejs微信公众号开发——5.素材管理接口
2017/04/11 NodeJs
vue2中filter()的实现代码
2017/07/09 Javascript
js实现首屏延迟加载实现方法 js实现多屏单张图片延迟加载效果
2017/07/17 Javascript
微信小程序纯文本实现@功能
2020/04/08 Javascript
Vue+Spring Boot简单用户登录(附Demo)
2020/11/12 Javascript
python分析apache访问日志脚本分享
2015/02/26 Python
简单掌握Python中glob模块查找文件路径的用法
2016/07/05 Python
Python如何调用JS文件中的函数
2019/08/16 Python
对pytorch中的梯度更新方法详解
2019/08/20 Python
python实现的爬取电影下载链接功能示例
2019/08/26 Python
关于Numpy中的行向量和列向量详解
2019/11/30 Python
python 两个一样的字符串用==结果为false问题的解决
2020/03/12 Python
Python多线程threading join和守护线程setDeamon原理详解
2020/03/18 Python
SmartBuyGlasses台湾:名牌眼镜,名牌太阳眼镜及隐形眼镜
2017/01/04 全球购物
基层工作经历证明
2014/01/13 职场文书
初中英语课后反思
2014/04/25 职场文书
行风评议整改报告
2014/11/06 职场文书
恰同学少年观后感
2015/06/08 职场文书
法制主题班会教案
2015/08/13 职场文书
MySQL查询学习之基础查询操作
2021/05/08 MySQL
MySQL中IF()、IFNULL()、NULLIF()、ISNULL()函数的使用详解
2021/06/26 MySQL
在Spring-Boot中如何使用@Value注解注入集合类
2021/08/02 Java/Android
Python 绘制多因子柱状图
2022/05/11 Python