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多重继承实例
Oct 11 Python
python数据处理实战(必看篇)
Jun 11 Python
Python使用微信SDK实现的微信支付功能示例
Jun 30 Python
详解Python自建logging模块
Jan 29 Python
python模块smtplib实现纯文本邮件发送功能
May 22 Python
django从请求到响应的过程深入讲解
Aug 01 Python
python变量赋值方法(可变与不可变)
Jan 12 Python
Python实现基于SVM的分类器的方法
Jul 19 Python
python创建属于自己的单词词库 便于背单词
Jul 30 Python
Python接口测试文件上传实例解析
May 22 Python
python文本处理的方案(结巴分词并去除符号)
May 26 Python
Python编程super应用场景及示例解析
Oct 05 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/02 国漫
电脑硬件及电脑配置知识大全
2020/03/17 数码科技
php图像处理函数大全(推荐收藏)
2013/07/11 PHP
浅谈php正则表达式中的非贪婪模式匹配的使用
2014/11/25 PHP
php调整服务器时间的方法
2015/04/03 PHP
php获取ajax的headers方法与内容实例
2017/12/27 PHP
PHP lcfirst()函数定义与用法
2019/03/08 PHP
经典海量jQuery插件 大家可以收藏一下
2010/02/07 Javascript
Firefox中autocomplete="off" 设置不起作用Bug的解决方法
2011/03/25 Javascript
20款非常优秀的 jQuery 工具提示插件 推荐
2012/07/15 Javascript
jquery更换文章内容与改变字体大小代码
2013/09/30 Javascript
javascript实现checkbox全选的代码
2015/04/30 Javascript
Hallo.js基于jQuery UI所见即所得的Web编辑器
2016/01/26 Javascript
JavaScript中的await/async的作用和用法
2016/10/31 Javascript
JavaScript组成、引入、输出、运算符基础知识讲解
2016/12/08 Javascript
完美解决input[type=number]无法显示非数字字符的问题
2017/02/28 Javascript
详解如何在React组件“外”使用父组件的Props
2018/01/12 Javascript
vue实现的上拉加载更多数据/分页功能示例
2019/05/25 Javascript
Vue 实现简易多行滚动"弹幕"效果
2020/01/02 Javascript
[01:03]悬念揭晓 11月26日DOTA2完美盛典不见不散
2017/11/23 DOTA
python 读取文件并替换字段的实例
2018/07/12 Python
Python开发最牛逼的IDE——pycharm
2018/08/01 Python
python中调试或排错的五种方法示例
2019/09/12 Python
新手学习Python2和Python3中print不同的用法
2020/06/09 Python
使用css3制作动感导航条示例
2014/01/26 HTML / CSS
美国购买新书和二手书网站:Better World Books
2018/10/31 全球购物
给妈妈洗脚活动方案
2014/08/16 职场文书
祖国在我心中演讲稿200字
2014/08/28 职场文书
公务员政审材料
2014/12/23 职场文书
员工离职感谢信
2015/01/22 职场文书
英语导游词
2015/02/13 职场文书
2015年服务员个人工作总结
2015/05/27 职场文书
晚会主持人开场白台词
2015/05/28 职场文书
驾驶员管理制度范本
2015/08/06 职场文书
《纸船和风筝》教学反思
2016/02/18 职场文书
Java面试题冲刺第十九天--数据库(4)
2021/08/07 Java/Android