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 相关文章推荐
精确查找PHP WEBSHELL木马的方法(1)
Apr 12 Python
Python批量修改文本文件内容的方法
Apr 29 Python
python遍历 truple list dictionary的几种方法总结
Sep 11 Python
python 获取键盘输入,同时有超时的功能示例
Nov 13 Python
python3+PyQt5 实现Rich文本的行编辑方法
Jun 17 Python
Python队列RabbitMQ 使用方法实例记录
Aug 05 Python
Python利用requests模块下载图片实例代码
Aug 12 Python
python爬虫开发之使用Python爬虫库requests多线程抓取猫眼电影TOP100实例
Mar 10 Python
详解pandas赋值失败问题解决
Nov 29 Python
详解python网络进程
Jun 15 Python
python如何为list实现find方法
May 30 Python
python高温预警数据获取实例
Jul 23 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实现分页的一个示例
2006/10/09 PHP
php写的带缓存数据功能的mysqli类
2012/09/06 PHP
php中使用preg_replace函数匹配图片并加上链接的方法
2013/02/06 PHP
浅析php中常量,变量的作用域和生存周期
2013/08/10 PHP
destoon网站转移服务器后搜索汉字出现乱码的解决方法
2014/06/21 PHP
smarty学习笔记之常见代码段用法总结
2016/03/19 PHP
laravel如何开启跨域功能示例详解
2017/08/31 PHP
FormValid0.5版本发布,带ajax自定义验证例子
2007/08/17 Javascript
js可突破windows弹退效果代码
2008/08/09 Javascript
半角全角相互转换的js函数
2009/10/16 Javascript
dtree 网页树状菜单及传递对象集合到js内,动态生成节点
2012/04/14 Javascript
jQuery实现列表自动滚动循环滚动展示新闻
2014/08/22 Javascript
使用node.js 制作网站前台后台
2014/11/13 Javascript
了不起的node.js读书笔记之例程分析
2014/12/22 Javascript
jquery判断复选框是否选中进行答题提示特效
2015/12/10 Javascript
使用jQuery制作基础的Web图片轮播效果
2016/04/22 Javascript
浅谈js script标签中的预解析
2016/12/30 Javascript
jQuery自定义多选下拉框效果
2017/06/19 jQuery
深入浅析Vue中的Prop
2018/06/10 Javascript
微信小程序canvas.drawImage完全显示图片问题的解决
2018/11/30 Javascript
详解微信小程序用定时器实现倒计时效果
2019/04/30 Javascript
Paypal支付不完全指北
2020/06/04 Javascript
Node.js fs模块原理及常见用途
2020/10/22 Javascript
vue仿携程轮播图效果(滑动轮播,下方高度自适应)
2021/02/11 Vue.js
跟老齐学Python之复习if语句
2014/10/02 Python
python使用json序列化datetime类型实例解析
2018/02/11 Python
Python中.join()和os.path.join()两个函数的用法详解
2018/06/11 Python
python爬虫中多线程的使用详解
2019/09/23 Python
python 怎样将dataframe中的字符串日期转化为日期的方法
2019/09/26 Python
咖啡蛋糕店创业计划书
2014/01/28 职场文书
趣味比赛活动方案
2014/02/15 职场文书
《鸿门宴》教学反思
2014/04/22 职场文书
公开承诺书格式
2014/05/21 职场文书
家具公司总经理岗位职责
2014/07/08 职场文书
党校党性分析材料
2014/12/19 职场文书
2015年试用期工作总结范文
2015/05/28 职场文书