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在windows下创建隐藏窗口子进程的方法
Jun 04 Python
Python 将RGB图像转换为Pytho灰度图像的实例
Nov 14 Python
python实现三次样条插值
Dec 17 Python
Ubuntu下Anaconda和Pycharm配置方法详解
Jun 14 Python
python获取地震信息 微信实时推送
Jun 18 Python
手动安装python3.6的操作过程详解
Jan 13 Python
python属于跨平台语言码
Jun 09 Python
Python reques接口测试框架实现代码
Jul 28 Python
通过实例了解python__slots__使用方法
Sep 14 Python
Python自动化办公Excel模块openpyxl原理及用法解析
Nov 05 Python
使用Python制作一盏 3D 花灯喜迎元宵佳节
Feb 26 Python
详细介绍python操作RabbitMq
Apr 12 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/02 无线电
PHP实现微信公众平台音乐点播
2014/03/20 PHP
php+js实现点赞功能的示例详解
2020/08/07 PHP
Jquery 模拟用户点击超链接或者按钮的方法
2013/10/25 Javascript
JavaScript面对国际化编程时的一些建议
2015/06/24 Javascript
jQuery可见性过滤器:hidden和:visibility用法实例
2015/06/24 Javascript
基于jQuery实现在线选座之高铁版
2015/08/24 Javascript
将JavaScript的jQuery库中表单转化为JSON对象的方法
2015/11/17 Javascript
Bootstrap按钮下拉菜单组件详解
2016/05/10 Javascript
jQuery简易时光轴实现方法示例
2017/03/13 Javascript
js自定义Tab选项卡效果
2017/06/05 Javascript
Angular 4.0学习教程之架构详解
2017/09/12 Javascript
AngularJs 最新验证手机号码的实例,成功测试通过
2017/11/26 Javascript
vue实现某元素吸顶或固定位置显示(监听滚动事件)
2017/12/13 Javascript
axios封装,使用拦截器统一处理接口,超详细的教程(推荐)
2019/05/02 Javascript
JavaScript实现PC端横向轮播图
2020/02/07 Javascript
koa中间件核心(koa-compose)源码解读分析
2020/06/15 Javascript
Vue 打包的静态文件不能直接运行的原因及解决办法
2020/11/19 Vue.js
[01:09:40]Newbee vs Pain 2018国际邀请赛小组赛BO2 第一场 8.16
2018/08/17 DOTA
Python实现获取网站PR及百度权重
2015/01/21 Python
PyCharm代码整体缩进,反向缩进的方法
2018/06/25 Python
基于Pycharm加载多个项目过程图解
2020/01/19 Python
django orm模块中的 is_delete用法
2020/05/20 Python
keras model.fit 解决validation_spilt=num 的问题
2020/06/19 Python
python 实现性别识别
2020/11/21 Python
加拿大最大的相机店:Henry’s
2017/05/17 全球购物
Emporio Armani腕表天猫官方旗舰店:乔治·阿玛尼为年轻人设计的副线品牌
2017/07/02 全球购物
手工制作的意大利礼服鞋:Ace Marks
2018/12/15 全球购物
计算机专业学生求职信分享
2013/12/15 职场文书
庆八一活动方案
2014/01/25 职场文书
助人为乐模范事迹材料
2014/06/02 职场文书
大学生活动总结模板
2014/07/02 职场文书
市政工程技术专业自荐书
2014/07/06 职场文书
搞笑的爱情检讨书
2014/10/01 职场文书
继续教育个人总结
2015/03/03 职场文书
2015年煤矿安全工作总结
2015/05/23 职场文书