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 相关文章推荐
PyCharm代码整体缩进,反向缩进的方法
Jun 25 Python
python 默认参数相关知识详解
Sep 18 Python
flask实现验证码并验证功能
Dec 05 Python
利用Python代码实现一键抠背景功能
Dec 29 Python
用python介绍4种常用的单链表翻转的方法小结
Feb 24 Python
详解python如何引用包package
Jun 07 Python
Python切片列表字符串如何实现切换
Aug 06 Python
使用Python pip怎么升级pip
Aug 11 Python
Python实现敏感词过滤的4种方法
Sep 12 Python
python中的垃圾回收(GC)机制
Sep 21 Python
python中如何打包用户自定义模块
Sep 23 Python
python通过cython加密代码
Dec 11 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
星际争霸秘籍
2020/03/04 星际争霸
PHP制作图型计数器的例子
2006/10/09 PHP
浅析php中json_encode()和json_decode()
2014/05/25 PHP
功能强大的php分页函数
2016/07/20 PHP
利用PHP抓取百度阅读的方法示例
2016/12/18 PHP
PHP使Laravel为JSON REST API返回自定义错误的问题
2018/10/16 PHP
PHP利用百度ai实现文本和图片审核
2019/05/08 PHP
Javascript的IE和Firefox兼容性汇编(zz)
2007/02/02 Javascript
Enter转换为Tab的小例子(兼容IE,Firefox)
2013/11/14 Javascript
同域jQuery(跨)iframe操作DOM(示例代码)
2013/12/13 Javascript
JS控件ASP.NET的treeview控件全选或者取消(示例代码)
2013/12/16 Javascript
js showModalDialog参数的使用详解
2014/01/07 Javascript
一个可以增加和删除行的table并可编辑表格中内容
2014/06/16 Javascript
JavaScript中eval()函数用法详解
2015/12/14 Javascript
如何使用Bootstrap的modal组件自定义alert,confirm和modal对话框
2016/03/01 Javascript
Google 地图类型详解及示例代码
2016/08/06 Javascript
Three.js实现简单3D房间布局
2018/12/30 Javascript
微信小程序实现分页加载效果
2020/11/19 Javascript
由Python运算π的值深入Python中科学计算的实现
2015/04/17 Python
Python在Windows和在Linux下调用动态链接库的教程
2015/08/18 Python
浅谈python的dataframe与series的创建方法
2018/11/12 Python
使用pandas实现csv/excel sheet互相转换的方法
2018/12/10 Python
python生成每日报表数据(Excel)并邮件发送的实例
2019/02/03 Python
python+mysql实现个人论文管理系统
2019/10/25 Python
Python super()方法原理详解
2020/03/31 Python
推荐一些比较有用的css3新属性
2014/11/11 HTML / CSS
CSS Grid布局教程之什么是网格布局
2014/12/30 HTML / CSS
送给他或她的礼物:FUN.com
2018/08/17 全球购物
红旗方阵解说词
2014/02/12 职场文书
2014年公司庆元旦活动方案
2014/03/05 职场文书
2015年质量月活动总结报告
2015/03/27 职场文书
行政后勤人员工作计划应该怎么写?
2019/08/16 职场文书
golang json数组拼接的实例
2021/04/28 Golang
vue完美实现el-table列宽自适应
2021/05/08 Vue.js
pytorch 如何使用amp进行混合精度训练
2021/05/24 Python
oracle delete误删除表数据后如何恢复
2022/06/28 Oracle