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装饰器使用实例:验证参数合法性
Jun 24 Python
玩转python selenium鼠标键盘操作(ActionChains)
Apr 12 Python
Python列表删除的三种方法代码分享
Oct 31 Python
Python cookbook(数据结构与算法)在字典中将键映射到多个值上的方法
Feb 18 Python
Python使用pyh生成HTML文档的方法示例
Mar 10 Python
OpenCV 轮廓检测的实现方法
Jul 03 Python
python线程的几种创建方式详解
Aug 29 Python
python输入错误后删除的方法
Oct 12 Python
10行Python代码计算汽车数量的实现方法
Oct 23 Python
pyspark 随机森林的实现
Apr 24 Python
详解Python直接赋值,深拷贝和浅拷贝
Jul 09 Python
Python Socket编程详解
Apr 25 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
制作美丽的拉花
2021/03/03 冲泡冲煮
PHP开发中常用的8个小技巧
2008/08/27 PHP
php启用zlib压缩文件的配置方法
2013/06/12 PHP
使用PHP实现生成HTML静态页面
2015/11/18 PHP
Thinkphp 框架扩展之应用模式实现方法分析
2020/04/27 PHP
使两个iframe的高度与内容自适应,且相等
2006/11/20 Javascript
利用js对象弹出一个层
2008/03/26 Javascript
jQuery源码解读之removeAttr()方法分析
2015/02/20 Javascript
基于bootstrap3和jquery的分页插件
2015/07/31 Javascript
JavaScript常用本地对象小结
2016/03/28 Javascript
浅谈MVC+EF easyui dataGrid 动态加载分页表格
2016/11/10 Javascript
jquery插件treegrid树状表格的使用方法详解(.Net平台)
2017/01/03 Javascript
VSCode配置react开发环境的步骤
2017/12/27 Javascript
jQuery封装animate.css的实例
2018/01/04 jQuery
vue.js中$set与数组更新方法
2018/03/08 Javascript
vue.js使用v-pre与v-html输出HTML操作示例
2018/07/07 Javascript
jQuery选择器之基本选择器用法实例分析
2019/02/19 jQuery
vue项目页面嵌入代码块vue-prism-editor的实现
2020/10/30 Javascript
python插入排序算法实例分析
2015/07/03 Python
你所不知道的Python奇技淫巧13招【实用】
2016/12/14 Python
python批量实现Word文件转换为PDF文件
2018/03/15 Python
python中文编码与json中文输出问题详解
2018/08/24 Python
python 分离文件名和路径以及分离文件名和后缀的方法
2018/10/21 Python
Python调用百度根据经纬度查询地址的示例代码
2019/07/07 Python
关于pytorch中网络loss传播和参数更新的理解
2019/08/20 Python
python 通过手机号识别出对应的微信性别(实例代码)
2019/12/22 Python
如何理解Python中包的引入
2020/05/29 Python
Python可以用来做什么
2020/11/23 Python
HTML5-WebSocket实现聊天室示例
2016/12/15 HTML / CSS
HTML5 Canvas如何实现纹理填充与描边(Fill And Stroke)
2013/07/15 HTML / CSS
Linux开机引导的步骤是什么
2015/10/19 面试题
国际政治个人自荐信范文
2013/11/26 职场文书
《英英学古诗》教学反思
2014/04/11 职场文书
学校党的群众路线教育实践活动总结报告
2014/07/03 职场文书
2014年煤矿工人工作总结
2014/12/08 职场文书
SQL Server 忘记密码以及重新添加新账号
2022/04/26 SQL Server