范文健康探索娱乐情感热点
投稿投诉
热点动态
科技财经
情感日志
励志美文
娱乐时尚
游戏搞笑
探索旅游
历史星座
健康养生
美丽育儿
范文作文
教案论文
国学影视

Django实战21Channels实现WebSocket

  在Django中实现WebSocket通信常见的两种方法分别一种是通过dwebsocket和Channels,dwebsocket模块基于django-websocket开发(dwebsocket使用可以参考文章:Django实战018:dwebsocket成功实现WebSocket),但是由于django-websocket已经停止开发所以dwebsocket的更新也基本停滞了。Channels为提升Django的 ASGI 能力开发的插件,可以同时处理 HTTP、HTTP2、WebSocket 协议。channels在保留了原生django的同步和易用的特性上还带来了异步处理方式,并且将django自带的认证系统以及session集成到模块中,扩展性非常强(官方推荐的插件)。
  安装Channels
  Python安装模块很简单,直接用pip来在线安装:pip install -U channels。channels安装需要下载很多依赖包,这些包用官方源容易下载超时(建议换源再装,pip换源可以参考文章:Django实战012:PIP配置国内镜像源及使用)。这里-U指--upgrade,如果已安装就升级到最新版。# 官方源安装很多依赖包下载的容易超时,建议换源再安装 pip install -U channels # 也可以临时指定安装源,-U指--upgrade,如果已安装就升级到最新版 python -m pip install -U channels -i  https://pypi.tuna.tsinghua.edu.cn/simple/ ------------------------------------------ Successfully installed Automat-20.2.0 PyHamcrest-2.0.2 attrs-20.3.0  autobahn-20.12.3 cffi-1.14.4 channels-3.0.3 constantly-15.1.0 cryptography-3.3.1  daphne-3.0.1 hyperlink-21.0.0 idna-3.1 incremental-17.5.0 pyasn1-0.4.8  pyasn1-modules-0.2.8 pycparser-2.20 pyopenssl-20.0.1 service-identity-18.1.0  twisted-20.3.0 txaio-20.12.1 zope.interface-5.2.0集成Channels框架
  Django2.x 不支持ASGI,所以实现WebSocket需要集成Channels框架(貌似Django3.x无依赖就支持WebSocket)。我们需要创建consumers.py和routing.py文件,routing.py相当于Django中的url用来映射路由和执行函数之间的关系。当监听到websocket的请求时,Django会根据routing.py来触发相应的执行函数。consumers.py则相当于Django中的views视图,在这里定义执行函数及相应的业务逻辑处理。在 wsgi.py 同级目录新增文件 asgi.py(如果你安装了channels在创建项目会自动生成该文件,但是还是需要修改),将Django运行切换到ASGI而不是WSGI服务。import os, django from channels.routing import get_default_application os.environ.setdefault("DJANGO_SETTINGS_MODULE", "channel_server.settings") django.setup() application = get_default_application()配置Channels
  要在Django项目中使用Channels就需要将Channels库添加到已安装的应用程序列表中,编辑 settings.py 件将channels添加到INSTALLED_APPS设置中。Channels走的是通道模式,所以我们需要设置Django以"通道模式"运行。通过ASGI_APPLICATION 来指定Django开启通道。如果有多个通道的话可以使用Redis作为我们的通道层,这时候就需要安装asgi_redis配合了(需安装redis)。INSTALLED_APPS = [     "django.contrib.admin",     "django.contrib.auth",     "django.contrib.contenttypes",     "django.contrib.sessions",     "django.contrib.messages",     "django.contrib.staticfiles",     "corsheaders",  # 跨域处理     "channels",     # 注册Channels ] # 启用 ASGI ASGI_APPLICATION = "channel_server.routing.application"定义routing.py
  在项目settings文件同级目录中新增routing.py,利用Channels的routring模块中的方法来实现路由分发。如果你需要认证可以添加中间件AuthMiddlewareStack或者SessionMiddlewareStack,不需要则直接在URLRouter中定义路由指向。from channels.auth import AuthMiddlewareStack from channels.sessions import SessionMiddlewareStack from channels.routing import ProtocolTypeRouter,URLRouter from django.urls import path, re_path from channel_server.consumers import consumers application = ProtocolTypeRouter({     "websocket":AuthMiddlewareStack(       # "websocket":SessionMiddlewareStack(         URLRouter ([             # Empty for now (http->django views is added by default)             # path("ws/parameter//", consumers),             path("ncdev/",test()),         ])     ) })定义consumers.py
  这个是核心的功能模块,需要单独拿出来说明。这里我们就简单的测试下整个项目是否可以正常地运行和被访问,这里我们定义一个简单的test类来测试下Channels。当链接进来的时候我们打印"链接上了,当我们接收到客户端消息的时候打印"已发送数据",当客户端断开链接的时候我们打印"链接断开啦"。class test(WebsocketConsumer):     # 当Websocket创建连接时     def connect(self):         self.accept()  # 保持连接!必须写这步         print("连接上啦")     # 当Websocket接收到消息时     def receive(self, text_data=None, bytes_data=None):         self.send(text_data)         print("已发送数据")     # 当Websocket发生断开连接时     def disconnect(self, code):         print("断开连接啦")运行项目
  当前项目运行环境为:python3.7.9 +Django2.2+Channels3.0.3,项目运行直接通过命令:python manage runserver来启动。然后通过Vue前端向Django发送一个websocket请求,我们可以看到后台已经打印了字符符:webscoket request!!!(说明请求已经进来了)。
  Channels测试
  这里我们用个WebScoket客户端测试工具来测试下请求结果,分别点击链接、发送数据、断开来测试刚才的几个接口是否能正常响应。在右侧我们可以看到服务端给我们返回了我们发送的数据,说明我们的WebScoket链接已经成功建立并可以发送数据。
  以上内容是小编给大家分享的【Django实战021:Channels实现WebSocket】。希望对大家有所帮助,如果大家有任何疑问请给我留言,小编会及时回复大家的。

私家车接滴滴顺风车为什么也有8年之限?滴滴顺风车,乘客付费高,车主收入少,应该是怕旧车影响客户的体验,虽然有的车况不错,但又没办法去验证。所以我不用滴滴了收钱就算营运,营运又分有司机和租赁,有司机的八年下线,规定安排明联想的命运由谁决定?联想,我买的第一部彩色手机就是联想手机,那时刚上班不久,国产手机一霸,国之骄傲。二十年后的今天,联想竟成了过街老鼠,不能不让人感叹,好在现在的中国已非昔日吴下阿蒙,国产已是百花齐放共享充电宝浮沉录编辑于斌出品潮起网于见专栏随着21世纪电子技术的飞速发展,人们的生活越来越离不开手机。小到与朋友的交流,大到生活记录或工作处理。可以说,没有手机的生活是不正常的。作为大众化的电子产微信转账发错了怎么撤回微信作为现在大家常用的一款社交软件,上面有很多功能,都是我们日常生活中经常会用到的,就比如说有些时候随礼用微信红包,或者是直接给人家转账,都是可以在微信上面进行的的,但有些时候难免MIUI12。5隐私保护之愚见今天听到司马南关于未来战争中,特斯拉可能成为敌国武器的说法,文中提到甚至可以读取通讯录攻击指定人员,其通过软件植入远程指令通过车里的各种摄像头传感器等,通过大数据和AI等各种技术组跨境电商哪个平台最好,各有什么特点?对于很多不懂跨境电商的卖家来说,亚马逊在跨境领域就是神一般的存在。但是现在的亚马逊已经不是卖家做跨境的首选平台了。只知亚马逊,却不知亚马逊创业成本有多高是新手卖家的通病。刷单要钱,印度网友问印度科技和制造业什么时候以何种方式可以超过中国?在海外问答网站Quora上,一名来自印度的网友问道印度的科技和制造业什么时候以何种方式可以超过中国,这个问题引起各国网友的热烈讨论,一名印度专家撰文引用各项数据说明了两国的差距,称机器人投资热潮再起投资热能否引爆机器人市场?来源工人日报阅读提示根据中国电子学会报告,预计2021年全球机器人市场规模将达到365。1亿美元,我国机器人市场规模将达到839亿元。随着我国劳动力成本不断提升而工业机器人价格持续Mate50还是仅支持4G网络,华为手机能否再王者归来?感谢您的阅读!关于华为mate50的消息屡见不鲜。我们现在都不知道到底,会不会有5G版本的华为mate50系列。这款手机会不会存在都成为了目前我们所担忧的问题。首先我们对于这款手机还在为选购讲解器品牌而发愁吗?放下烦恼选择我们就对了说到解说器,在国内的会议解说设备售卖或者租赁行业中,各种无线解说器设备,各种解说器销售品牌公司层出不穷,报价参差不齐,这让消费者们在选择购置时头疼不已,关于无线解说设备哪家好的问题明珠货运与极兔签署物流合作协议近日,明珠货运控股有限公司(YGMZ。US)(以下简称明珠货运)宣布与极兔国际物流有限公司(以下简称极兔物流)签署货物运输协议,双方就建立长期运输业务合作关系达成共识。根据协议条款
如何选择虚拟主机的空间大小?新网虚拟主机资讯为了便于入手大多数新手站长都选择购买虚拟主机来建立个人博客网站,但是有些站长比较犹豫,不知道应该买多大的虚拟主机才合适。虚拟主机的大小,就是网站服务器硬盘的大小,用字节实习生删库,企业应当如何防止删库跑路?新网云资讯6月24日消息,脉脉用户程序猿。白胜在社交媒体称,字节跳动一名实习生删除了公司所有lite模型,在脉脉上引发关注。这名用户随后在回复中称实习生直接delete父目录,还加三字母Gus。com被爆以近200万元价格成交新网域名资讯据外媒爆料,三字母域名Gus。com超30万美元交易,约合人民币194万元。该域名由NatCohen的公司Telepathy拥有,目前已转移给一个挪威的注册人。经新网查高考分数线陆续公布!这些相关域名你都知道吗?新网域名资讯6月23日起,各地陆续公布高考成绩。据中新网报道,23日起,内蒙古上海安徽江西广西四川云南甘肃宁夏等省份的考生可以查询自己的高考成绩。山西吉林贵州陕西等地将在24日公布国别域名eCommerce。de以184,250美元成交新网域名资讯据报道,近期eCommerce。de以152,000欧元(181,489美元)达成交易,在本年度。de交易排行榜中暂居第14位。。de是德国国家和地区顶级域(ccTLD怎么通过域名来分辨假冒的大学?新网域名科普近日,全国各省份将陆续公布高考成绩及各批次各类录取最低控制分数线。从6月23日开始一直到25日,连续3天,全国各省份都将陆续放榜。各地高考分数,录取分数线陆续公布,接下暑期将至,教育机构如何用网站抓住营销风口?新网建站资讯618的势头刚过,翻了一眼营销日历,发现从七月一直到九月之间,都没有什么比较强势的营销点,可以制造出全民狂欢的感觉。但是随着天气的炎热,暑假的来临意味着学生群体有了更加企业为什么必须要搭建网站?新网建站资讯目前,有7。66亿用户在搜索引擎上,而百度更是占了其中的71用户群体。显然网民还是依赖搜索引擎,特别是百度查询资讯。对于企业来说,哪里受众多就在哪里进行展示,才能获取更Docker严重错误导致企业数据被黑客擦除,幸好有备份新网云资讯几天前,由于Docker中存在多年的一个错误,导致NewsBlur(一种基于Web的RSS阅读器)的数据库被黑客删除。在将MongoDB集群迁移到Docker容器过程中,IDC最新发布2021第一季度中国云市场规模超300亿新网云资讯7月29日,IDC最新发布的2021年第一季度中国公有云市场数据显示,季度内IaaSPaaS市场规模达46。32亿美元(301亿人民币),其中阿里云排名第一,市场份额为4两字母精品域名is。com被曝以1260万交易两字母。com域名由于简短易记,对应终端多,建站范围广,全球通用性极强等种种优势,一直都是珍品中的珍品。但因为其全球仅有寥寥676枚,并且绝大多数已经被建站或收藏,在市场中流通的极