五月开心播播网_国内精品伊人久久久久影院对白_亚洲精品高清视频_国产精品激情_68精品久久久久久欧美_四虎免费av_97精品在线视频_欧美知名女优

您的位置:首頁技術(shù)文章
文章詳情頁

Django中如何使用Channels功能

瀏覽:14日期:2024-11-25 11:27:40
目錄一、什么是WebSocket二、什么是Channels三、Django中使用Channel四、前端Websocket使用五、測試Channels功能

前言:最近后臺寫游戲更新版本功能,簡單就是前端發(fā)送更新請求,后端需要對很多臺服務(wù)器進(jìn)行更新和各種操作,本來想著實現(xiàn)不難,后來發(fā)現(xiàn)因為后端需要執(zhí)行很長時間,前端返回報錯,后端會執(zhí)行完畢,但是前端先斷開了,這樣在前端頁面我就看不到更新結(jié)果了。通過調(diào)整nginx參數(shù),設(shè)置超時時間,還是日志會報499狀態(tài)碼錯誤。后來了解到了websocket,對于需要長時間處理的請求,使用websocket會更好,通過使用websocket實現(xiàn)了自己的功能,簡單分享下

一、什么是WebSocket

WebSocket是一種在單個TCP連接上進(jìn)行全雙工通訊的協(xié)議。WebSocket允許服務(wù)端主動向客戶端推送數(shù)據(jù)。在WebSocket協(xié)議中,客戶端瀏覽器和服務(wù)器只需要完成一次握手就可以創(chuàng)建持久性的連接,并在瀏覽器和服務(wù)器之間進(jìn)行雙向的數(shù)據(jù)傳輸。

WebSocket的響應(yīng)頭中重要的字段:HTTP/1.1 101 Swi tching Protocols:切換協(xié)議,WebSocket協(xié)議通過HTTP協(xié)議來建立運(yùn)輸層的TCP連接Connection和Upgrade:表示服務(wù)端發(fā)起的WebSocket響應(yīng)Sec-WebSocket-Accept:表示服務(wù)器接受了客戶端的請求,由Sec-WebSocket-Key計算得來

WebSocket協(xié)議的優(yōu)點(diǎn):支持雙向通信,實時性更強(qiáng)數(shù)據(jù)格式比較輕量,性能開銷小,通信高效支持?jǐn)U展,用戶可以擴(kuò)展協(xié)議或者實現(xiàn)自定義的子協(xié)議(比如支持自定義壓縮算法等)

WebSocket協(xié)議的缺點(diǎn):少部分瀏覽器不支持,瀏覽器支持的程度與方式有區(qū)別長連接對后端處理業(yè)務(wù)的代碼穩(wěn)定性要求更高,后端推送功能相對復(fù)雜成熟的HTTP生態(tài)下有大量的組件可以復(fù)用,WebSocket較少

WebSocket的應(yīng)用場景:即時聊天通信,網(wǎng)站消息通知在線協(xié)同編輯,如騰訊文檔多玩家在線游戲,視頻彈幕,股票基金實施報價

二、什么是Channels

Django本身不支持WebSocket,但可以通過集成Channels框架來實現(xiàn)WebSocketChannels是針對Django項目的一個增強(qiáng)框架,可以使Django不僅支持HTTP協(xié)議,還能支持WebSocket,MQTT等多種協(xié)議,同時Channels還整合了Django的auth以及session系統(tǒng)方便進(jìn)行用戶管理及認(rèn)證。

2.1channels文件和配置的含義

asgi.py:介于網(wǎng)絡(luò)協(xié)議服務(wù)和Python應(yīng)用之間的接口,能夠處理多種通用協(xié)議類型,包括HTTP、HTTP2和WebSocketchannel_layers:在settings.py中配置。類似于一個通道,發(fā)送者(producer)在一段發(fā)送消息,消費(fèi)者(consumer)在另一端進(jìn)行監(jiān)聽routings.py:相當(dāng)于Django中的urls.pyconsumers.py:相當(dāng)于Django中的views.py

2.2channels文檔鏈接

https://channels.readthedocs.io/en/latest/introduction.html

2.3.WSGI和ASGI不同

WSGI(Python Web Server Gateway Interface):為Python語言定義的Web服務(wù)器和Web應(yīng)用程序或者框架之間的一種簡單而通用的接口。

ASGI(Asynchronous Web Server Gateway Interface):異步網(wǎng)關(guān)協(xié)議接口,一個介于網(wǎng)絡(luò)協(xié)議服務(wù)和Python應(yīng)用之間的標(biāo)準(zhǔn)接口,能夠處理多種通用的協(xié)議類型,包括HTTP,HTTP2和WebSocket。

三、Django中使用Channel

3.1安裝channels

pip install channels==2.1.7

3.2修改setting.py文件

INSTALLED_APPS = [ ’django.contrib.staticfiles’, ... ... ’channels’,] # 指定ASGI的路由地址ASGI_APPLICATION = ’webapp.routing.application’ #ASGI_APPLICATION 指定主路由的位置為webapp下的routing.py文件中的application

3.3setting.py的同級目錄下創(chuàng)建routing.py路由文件,routing.py類似于Django中的url.py指明websocket協(xié)議的路由

from channels.auth import AuthMiddlewareStackfrom channels.routing import ProtocolTypeRouter, URLRouterfrom channels.security.websocket import AllowedHostsOriginValidatorimport webapp.routing application = ProtocolTypeRouter({ ’websocket’:AllowedHostsOriginValidator(AuthMiddlewareStack( URLRouter(webapp.routing.websocket_urlpatterns )) )})

ProtocolTypeRouter:ASGI支持多種不同的協(xié)議,在這里可以指定特定協(xié)議的路由信息,這里只使用了websocket協(xié)議,這里只配置websocket即可AllowedHostsOriginValidator:指定允許訪問的IP,設(shè)置后會去Django中的settings.py中去查找ALLOWED_HOSTS設(shè)置的IPAuthMiddlewareStack:用于WebSocket認(rèn)證,繼承了Cookie Middleware,SessionMiddleware,SessionMiddleware。django的channels封裝了django的auth模塊,使用這個配置我們就可以在consumer中通過下邊的代碼獲取到用戶的信息,和請求的url路徑

self.sc

def connect(self): self.user = self.scope['user'] self.request_url = self.scope[’path’]

ope類似于django中的request,包含了請求的type、path、header、cookie、session、user等等有用的信息URLRouter: 指定路由文件的路徑,也可以直接將路由信息寫在這里,代碼中配置了路由文件的路徑,會去對應(yīng)應(yīng)用下的routeing.py文件中查找websocket_urlpatterns

3.4webapp.routing.py內(nèi)容如下

from django.urls import pathfrom webapp.consumers import ChatConsumer websocket_urlpatterns = [path(’ws/chat/’,ChatConsumer)]

routing.py路由文件跟django的url.py功能類似,語法也一樣,意思就是訪問ws/chat/都交給ChatConsumer處理。

3.5在要使用WebSocket的應(yīng)用中創(chuàng)建consumers.py,consumers.py是用來開發(fā)ASGI接口規(guī)范的python應(yīng)用,而Django中的view.py是用來開發(fā)符合WSGI接口規(guī)范的python應(yīng)用。

from channels.generic.websocket import WebsocketConsumerfrom channels.generic.websocket import AsyncWebsocketConsumerimport json,time

Channels支持同步,也支持異步方式

同步方式代碼如下:

class ChatConsumer(WebsocketConsumer): # websocket建立連接時執(zhí)行方法 def connect(self):self.accept() # websocket斷開時執(zhí)行方法 def disconnect(self, close_code):self.close() # 從websocket接收到消息時執(zhí)行函數(shù) def receive(self, text_data):text_data_json = json.loads(text_data)message = f’結(jié)果:{text_data_json}’self.send(text_data=json.dumps({ ’message’: message}))

異步方式代碼如下:

class ChatConsumer(AsyncWebsocketConsumer): #websocket建立連接時執(zhí)行方法 async def connect(self):await self.accept() # websocket斷開時執(zhí)行方法 async def disconnect(self, close_code):print(close_code) # 從websocket接收到消息時執(zhí)行函數(shù) async def receive(self, text_data):for i in range(10): time.sleep(i) message = ’結(jié)果: ’ + str(i) await self.send(text_data=json.dumps({’message’: message }))

需要注意的是在異步中所有的邏輯都應(yīng)該是異步的,不可以那同步的和異步的代碼混合使用。

四、前端Websocket使用

WebSocket對象一個支持四個消息:onopen,onmessage,oncluse和onerror

onopen: 當(dāng)瀏覽器和websocket服務(wù)端連接成功后會觸發(fā)onopen消息onerror: 如果連接失敗,或者發(fā)送、接收數(shù)據(jù)失敗,或者數(shù)據(jù)處理出錯都會觸發(fā)onerror消息onmessage: 當(dāng)瀏覽器接收到websocket服務(wù)器發(fā)送過來的數(shù)據(jù)時,就會觸發(fā)onmessage消息,參數(shù)e包含了服務(wù)端發(fā)送過來的數(shù)據(jù)onclose: 當(dāng)瀏覽器接收到websocket服務(wù)器發(fā)送過來的關(guān)閉連接請求時,會觸發(fā)onclose消息

拼接websocket請求地址,建立長連接

var chatSocket = new WebSocket(’ws://’ + window.location.host + ’/ws/ver_update/’);

連接事件

chatSocket.onopen = function () { console.log(getCurrentDate(2) + ’ ’ + ’websocket connection success’)};

錯誤事件

chatSocket.onerror = function () { console.error(getCurrentDate(2) + ’ ’ + ’websocket connection error’)};

關(guān)閉事件

chatSocket.onclose = function (e) { layer.msg(’websocket關(guān)閉,檢查錯誤日志’, {icon: 2}); console.error(getCurrentDate(2) + ’ ’ + ’websocket closed unexpectedly 狀態(tài)碼:’ + e.code); chatSocket.close();};

接收事件

chatSocket.onmessage = function (e) { var data = JSON.parse(e.data);}五、測試Channels功能

Django中如何使用Channels功能

總結(jié):自從使用Websocket功能后,再也沒發(fā)生前端突然斷開的情況了,對于長時間運(yùn)行的任務(wù),使用websocket是不錯的選擇~,有不足的地方請多多指教

到此這篇關(guān)于Django中使用Channels功能的文章就介紹到這了,更多相關(guān)Django使用Channels內(nèi)容請搜索好吧啦網(wǎng)以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持好吧啦網(wǎng)!

標(biāo)簽: Django
相關(guān)文章:
欧美婷婷六月丁香综合色| 亚洲精品大全| 日本视频在线免费观看| 香港经典三级在线| av亚洲在线观看| 五月天亚洲一区| 91欧美一区二区| 国产亚洲精品久久久优势| 美脚丝袜脚交一区二区| 先锋影视中文字幕| www中文字幕在线观看| 亚洲第一黄网| 欧美精品生活片| 成人eeuss影院在线观看| 五月激情综合网| 成人亚洲精品777777大片| www.亚洲| 一本一本久久| 一本色道久久88综合日韩精品| 亚洲乱码日产精品bd在线观看| 日本三级日本三级日本三级极| 国产精品视频一区二区免费不卡 | 国内精品久久久久久久久久久| 福利小视频在线观看| 国产精品x8x8一区二区| 中文字幕电影一区| 国产精品久久久久久久app| 免费看一级大黄情大片| 最近中文字幕大全中文字幕免费 | 精品国产伦理网| 亚洲综合色在线观看| 亚洲小说春色综合另类网蜜桃| 欧洲天堂在线观看| 天天揉久久久久亚洲精品| 成人妇女免费播放久久久| 成本人h片动漫网站在线观看 | 国内精品国产三级国产a久久| 性色av一区二区三区免费| 免费人成又黄又爽又色| av在线www| 不卡的国产精品| 色一情一乱一乱一91av| 草b视频在线观看| jizz视频18| 亚洲精品乱码久久久久久| 国产精品无码专区av在线播放 | 国产精品丝袜久久久久久app| 免费黄色av片| 亚洲电影在线播放| 国产又粗又猛又爽视频| 在线看av的网址| 亚洲欧美二区三区| 麻豆视频传媒入口| 国产精品永久久久久久久久久| 99久久综合国产精品二区| 国产精品入口福利| 最新在线观看av网站| 欧美日韩一区中文字幕| 一级片免费网址| 中文字幕一区二区三区域| 成人欧美一区二区三区| 精品一区二区三区四区五区六区| 成年人视频在线网站| 自拍视频一区| 精品久久久久一区| 99久久国产精| 中文字幕一区二区三区域| 久久久久久久久97黄色工厂| 国产视频在线观看网站| 忘忧草在线日韩www影院| 夜夜夜精品看看| 中文字幕超清在线免费观看| www.日本在线观看| 超碰在线97国产| 欧美亚洲三区| 国产亚洲精品久久久优势| 日本精品久久久久久久久久 | 国产精品日韩二区| 91精品久久久久久蜜桃| 调教驯服丰满美艳麻麻在线视频 | 搞黄视频免费在线观看| 欧美精品一卡| 亚洲综合第一| 巨大荫蒂视频欧美另类大| 亚洲一区二区三区视频在线播放 | 亚洲精品网站在线| 国产风韵犹存在线视精品| 亚洲国产日韩欧美在线观看| 欧美精品日韩少妇| 亚洲欧美日韩精品久久奇米色影视| 亚洲av无一区二区三区久久| 6080成人| 快播日韩欧美| av资源在线| 欧亚精品中文字幕| 国产黄大片在线观看画质优化| 日韩av免费在线| 黄色片免费看| 在线观看免费高清视频97| 日日干天夜夜| 午夜精品99久久免费| 久久精品国产免费观看99| 国产精品久久久久久久免费软件| 日本黄网站色大片免费观看| 91福利在线免费| 精品一区精品二区| 麻豆精品传媒视频观看| 色欧美日韩亚洲| 亚洲日本在线播放| 欧美午夜片在线观看| 香蕉视频911| 欧美性色黄大片手机版| 十八禁一区二区三区| 亚洲精品视频在线看| av在线免费在线观看| 偷窥国产亚洲免费视频| 精品一区二区三区在线成人| 亚洲大片一区二区三区| www.麻豆av| 91精品啪在线观看国产60岁| 久久久久亚洲av无码专区体验| 99久精品国产| 亚洲亚裔videos黑人hd| 今天免费高清在线观看国语| 偷拍一区二区| 国产手机在线观看| 精品免费视频| 国产精品三级在线观看无码| 国产女主播在线一区二区| 噜噜噜噜噜在线视频| 看全色黄大色黄女片18| 精品国产一区二区三区四区四| 欧美色网一区| 欧美日韩亚洲一| 国产精品久久久久久久免费软件| 永久免费看mv网站入口| 久久综合九色综合97婷婷女人| 黄免费在线观看| 国产精品免费久久| xxx亚洲日本| 日本成人在线免费视频| 91福利精品第一导航| 日本三级电影网| 丰满人妻一区二区三区53号| 在线观看爽视频| 国产午夜福利100集发布| 亚洲国产精品嫩草影院久久av| 日本毛片在线观看| 91免费视频国产| 欧美亚洲国产一区二区三区| 亚洲欧洲日本韩国| 在线中文字日产幕| 国产精品久久久久国产精品日日| 亚洲aⅴ乱码精品成人区| 精品一区二区三区四区在线| av手机在线观看| 亚洲三区在线观看| 国产在线精品一区二区夜色| 黄色片网站免费在线观看| 97久久精品人人澡人人爽缅北| 北岛玲heyzo一区二区| 少妇一级黄色片| 中文字幕日韩在线观看| 欧美日韩美女| 欧美 变态 另类 人妖| 日韩欧美国产一区二区| 三区四区电影在线观看| 成人性生活免费看| 北条麻妃一区二区三区| 亚洲午夜无码久久久久| 精品亚洲夜色av98在线观看| 亚洲精品555| 成人免费观看毛片| 国产日韩欧美一区二区三区综合| 三级a性做爰视频| 免费在线观看a视频| 国产精品免费福利| 国产一区不卡视频| julia中文字幕久久亚洲蜜臀| 国产国语刺激对白av不卡| 9191国语精品高清在线| 欧美多人野外伦交| 亚洲av毛片在线观看| 国产日韩欧美在线观看| 欧美视频在线免费| 国产欧美三级| eeuss在线观看| 国产熟女高潮一区二区三区| 日韩午夜在线影院| silk一区二区三区精品视频| 久草免费在线观看视频| 欧美激情久久久久久| 久久久久久久久久久妇女| 亚洲男人天堂影院| 黄色网址三级| 92福利视频午夜1000合集在线观看| 蜜臀久久精品| 已婚少妇美妙人妻系列| 亚洲黄在线观看| 久久精品国产一区二区|