国产成人精品久久免费动漫-国产成人精品天堂-国产成人精品区在线观看-国产成人精品日本-a级毛片无码免费真人-a级毛片毛片免费观看久潮喷

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

Django websocket原理及功能實(shí)現(xiàn)代碼

瀏覽:126日期:2024-09-18 11:14:07

一 什么是Websocket

WebSocket是一種在單個(gè)TCP連接上進(jìn)行全雙工通信的協(xié)議

WebSocket使得客戶端和服務(wù)器之間的數(shù)據(jù)交換變得更加簡(jiǎn)單,允許服務(wù)端主動(dòng)向客戶端推送數(shù)據(jù)。在WebSocket API中,瀏覽器和服務(wù)器只需要完成一次握手,兩者之間就直接可以創(chuàng)建持久性的連接,并進(jìn)行雙向數(shù)據(jù)傳輸

現(xiàn)在,很多網(wǎng)站為了實(shí)現(xiàn)推送技術(shù),所用的技術(shù)都是輪詢。輪詢是在特定的的時(shí)間間隔(如每1秒),由瀏覽器對(duì)服務(wù)器發(fā)出HTTP請(qǐng)求,然后由服務(wù)器返回最新的數(shù)據(jù)給客戶端的瀏覽器。這種傳統(tǒng)的模式帶來很明顯的缺點(diǎn),即瀏覽器需要不斷的向服務(wù)器發(fā)出請(qǐng)求,然而HTTP請(qǐng)求可能包含較長(zhǎng)的頭部,其中真正有效的數(shù)據(jù)可能只是很小的一部分,顯然這樣會(huì)浪費(fèi)很多的帶寬等資源。

而比較新的技術(shù)去做輪詢的效果是Comet。這種技術(shù)雖然可以雙向通信,但依然需要反復(fù)發(fā)出請(qǐng)求。而且在Comet中,普遍采用的長(zhǎng)鏈接,也會(huì)消耗服務(wù)器資源。

在這種情況下,HTML5定義了WebSocket協(xié)議,能更好的節(jié)省服務(wù)器資源和帶寬,并且能夠更實(shí)時(shí)地進(jìn)行通訊

二 Django實(shí)現(xiàn)Websocket

django實(shí)現(xiàn)websocket大致上有兩種方式,一種channels,一種是dwebsocket。channels依賴于redis,twisted等,相比之下使用dwebsocket要更為方便一些

三 dwebsocket安裝

pip3 install dwebsocket

四 dwebsocket配置

INSTALLED_APPS = [ ..... ..... ’dwebsocket’,] MIDDLEWARE_CLASSES = [ ...... ...... ’dwebsocket.middleware.WebSocketMiddleware’ # 為所有的URL提供websocket,如果只是單獨(dú)的視圖需要可以不選 ]WEBSOCKET_ACCEPT_ALL=True # 可以允許每一個(gè)單獨(dú)的視圖實(shí)用websockets

五 使用

html代碼:

<!DOCTYPE html><html lang='en'><head> <meta charset='UTF-8'> <title>Title</title></head><body><button onclick='WebSocketTest()'>test</button></body><script> function WebSocketTest() { alert(1) if ('WebSocket' in window) { alert('您的瀏覽器支持 WebSocket!'); // 打開一個(gè) web socket ws = new WebSocket('ws://127.0.0.1:8000/path/'); ws.onopen = function () {// Web Socket 已連接上,使用 send() 方法發(fā)送數(shù)據(jù)ws.send('發(fā)送數(shù)據(jù)');alert('數(shù)據(jù)發(fā)送中...'); }; ws.onmessage = function (evt) {var received_msg = evt.data;alert('數(shù)據(jù)已接收...');alert('數(shù)據(jù):' + received_msg) }; ws.onclose = function () {// 關(guān)閉 websocketalert('連接已關(guān)閉...'); }; } else { // 瀏覽器不支持 WebSocket alert('您的瀏覽器不支持 WebSocket!'); } }</script></html>

views視圖層:

from django.shortcuts import render,HttpResponse# Create your views here.def login(request): return render(request,’login.html’)from dwebsocket.decorators import accept_websocket@accept_websocketdef path(request): if request.is_websocket(): print(1) request.websocket.send(’下載完成’.encode(’utf-8’))

路由層:

from django.conf.urls import urlfrom django.contrib import adminfrom app01 import viewsurlpatterns = [ url(r’^admin/’, admin.site.urls), url(r’^login/’, views.login), url(r’^path/’, views.path),]

六 詳解

#dwebsocket有兩種裝飾器:require_websocket和accept_websocekt,使用require_websocket裝飾器會(huì)導(dǎo)致視圖函數(shù)無法接收導(dǎo)致正常的http請(qǐng)求,一般情況使用accept_websocket方式就可以了,# # dwebsocket的一些內(nèi)置方法:# # request.is_websocket():判斷請(qǐng)求是否是websocket方式,是返回true,否則返回false# request.websocket: 當(dāng)請(qǐng)求為websocket的時(shí)候,會(huì)在request中增加一個(gè)websocket屬性,# WebSocket.wait() 返回客戶端發(fā)送的一條消息,沒有收到消息則會(huì)導(dǎo)致阻塞# WebSocket.read() 和wait一樣可以接受返回的消息,只是這種是非阻塞的,沒有消息返回None# WebSocket.count_messages()返回消息的數(shù)量# WebSocket.has_messages()返回是否有新的消息過來# WebSocket.send(message)像客戶端發(fā)送消息,message為byte類型

以上就是本文的全部?jī)?nèi)容,希望對(duì)大家的學(xué)習(xí)有所幫助,也希望大家多多支持好吧啦網(wǎng)。

標(biāo)簽: Django
相關(guān)文章:
主站蜘蛛池模板: 成年人在线观看免费 | 亚洲 中文 欧美 日韩 在线人 | 免费精品久久 | 欧美一级毛片特黄黄 | 撸天堂 | 久久久久久久久久久大尺度免费视频 | 日韩精品中文字幕视频一区 | 久草热视频在线观看 | 久久精品国产99国产 | 99精品视频在线播放2 | 欧美一级毛片生活片 | 精品久久久久久久久久香蕉 | 国产在线精品一区二区三区不卡 | 一级毛片区 | 成人免费高清视频网址 | 亚洲日本久久一区二区va | a级片免费观看 | 韩国三级大全久久网站 | 香蕉国产人午夜视频在线观看 | 精品国产自 | 日韩欧美视频一区二区在线观看 | 国产精品青草久久 | 欧美日韩成人午夜免费 | 久久精品国产免费看久久精品 | www.日本高清视频.com | 国产欧美精品综合一区 | 精品老司机在线视频香蕉 | 亚洲精品98久久久久久中文字幕 | 可以免费看黄的网址 | 韩国免费特一级毛片 | 欧美一级网站 | 亚洲国产第一区二区香蕉日日 | 国产成人精品系列在线观看 | 欧美日韩色 | 亚洲欧美日本在线 | 国产成人综合亚洲一区 | 一本久道在线 | 免费在线一区二区三区 | 国产成人精品一区二区不卡 | 亚洲精品专区一区二区欧美 | 亚洲视频在线网站 |