最新国产好看的视频,伊人天堂AV在线,国产Aaaaaa视频,蜜臀视频在线观看一区,人妻av色图,密臀久久久精品影片,青青视频免费观看毛片,久草在线观看视,国产三级精品色情在线

Django websocket原理及功能實現代碼

 更新時間:2020年11月14日 11:08:38   作者:迎風而來  
這篇文章主要介紹了Django websocket原理及功能實現代碼,文中通過示例代碼介紹的非常詳細,對大家的學習或者工作具有一定的參考學習價值,需要的朋友可以參考下

一 什么是Websocket

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

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

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

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

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

二 Django實現Websocket

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

三 dwebsocket安裝

pip3 install dwebsocket

四 dwebsocket配置

INSTALLED_APPS = [
  .....
  .....
  'dwebsocket',
]
 
MIDDLEWARE_CLASSES = [
  ......
  ......
  'dwebsocket.middleware.WebSocketMiddleware' # 為所有的URL提供websocket,如果只是單獨的視圖需要可以不選
 
]
WEBSOCKET_ACCEPT_ALL=True  # 可以允許每一個單獨的視圖實用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!");

      // 打開一個 web socket
      ws = new WebSocket("ws://127.0.0.1:8000/path/");

      ws.onopen = function () {
        // Web Socket 已連接上,使用 send() 方法發(fā)送數據
        ws.send("發(fā)送數據");
        alert("數據發(fā)送中...");
      };

      ws.onmessage = function (evt) {
        var received_msg = evt.data;
        alert("數據已接收...");
        alert("數據:" + received_msg)
      };

      ws.onclose = function () {
        // 關閉 websocket
        alert("連接已關閉...");
      };
    }

    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_websocket
def path(request):
  if request.is_websocket():
    print(1)
    request.websocket.send('下載完成'.encode('utf-8'))

路由層:

from django.conf.urls import url
from django.contrib import admin
from app01 import views
urlpatterns = [
  url(r'^admin/', admin.site.urls),
  url(r'^login/', views.login),
  url(r'^path/', views.path),
]

六 詳解

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

以上就是本文的全部內容,希望對大家的學習有所幫助,也希望大家多多支持腳本之家。

相關文章

  • 在python中實現發(fā)送短信功能

    在python中實現發(fā)送短信功能

    工作中我們經常會用到發(fā)短信的需求,那么如何在python代碼中實現發(fā)短息你的需求呢,本文我們就一起深入探討下,文中有詳細的代碼示例供大家參考,具有一定的參考價值,需要的朋友可以參考下
    2024-04-04
  • python3.7安裝matplotlib失敗問題的完美解決方法

    python3.7安裝matplotlib失敗問題的完美解決方法

    由于學習需要安裝matplotlib庫,閱讀網上教程后一直出現各種各樣的錯誤,下面這篇文章主要給大家介紹了關于python3.7安裝matplotlib失敗問題的完美解決方法,需要的朋友可以參考下
    2022-07-07
  • Python腳本利用adb進行手機控制的方法

    Python腳本利用adb進行手機控制的方法

    這篇文章主要介紹了Python腳本利用adb進行手機控制的方法,文中通過示例代碼介紹的非常詳細,對大家的學習或者工作具有一定的參考學習價值,需要的朋友們下面隨著小編來一起學習學習吧
    2019-07-07
  • Python爬蟲動態(tài)ip代理防止被封的方法

    Python爬蟲動態(tài)ip代理防止被封的方法

    在本篇文章中小編給大家整理了關于Python爬蟲動態(tài)ip代理防止被封的方法以及實例代碼,需要的朋友們學習下。
    2019-07-07
  • Python連接SQL Server數據庫并實時讀取數據

    Python連接SQL Server數據庫并實時讀取數據

    在Python中,可以使用pyodbc庫來連接SQL Server數據庫,并使用pandas庫來進行數據處理,下面我們就來講講如何實時讀取SQL Server數據庫表,并將數據寫入Excel文件,需要的可以參考下
    2023-12-12
  • Pandas.DataFrame時間序列數據處理的實現

    Pandas.DataFrame時間序列數據處理的實現

    本文主要介紹了Pandas.DataFrame時間序列數據處理的實現,文中通過示例代碼介紹的非常詳細,對大家的學習或者工作具有一定的參考學習價值,需要的朋友們下面隨著小編來一起學習學習吧
    2023-02-02
  • Pytorch參數注冊和nn.ModuleList nn.ModuleDict的問題

    Pytorch參數注冊和nn.ModuleList nn.ModuleDict的問題

    這篇文章主要介紹了Pytorch參數注冊和nn.ModuleList nn.ModuleDict的問題,具有很好的參考價值,希望對大家有所幫助。如有錯誤或未考慮完全的地方,望不吝賜教
    2023-01-01
  • 正則表達式在Python中的應用小結

    正則表達式在Python中的應用小結

    正則表達式是一種強大的文本模式匹配工具,它可以幫助我們快速地檢索、替換或提取字符串中的特定模式,在本文中,我將通過一些示例代碼,詳細介紹正則表達式在Python中的應用,感興趣的朋友一起看看吧
    2024-07-07
  • python里的條件語句和循環(huán)語句你了解多少

    python里的條件語句和循環(huán)語句你了解多少

    這篇文章主要為大家詳細介紹了python的條件語句和循環(huán)語句,使用數據庫,文中示例代碼介紹的非常詳細,具有一定的參考價值,感興趣的小伙伴們可以參考一下
    2022-02-02
  • Python中的exec、eval使用實例

    Python中的exec、eval使用實例

    這篇文章主要介紹了Python中的exec、eval使用實例,本文以簡潔的方式總結了Python中的exec、eval作用,并給出實例,需要的朋友可以參考下
    2014-09-09

最新評論

北安市| 汾西县| 永丰县| 桐柏县| 文山县| 乐清市| 西丰县| 宁陵县| 浑源县| 新闻| 达拉特旗| 响水县| 安达市| 宜良县| 五指山市| 栖霞市| 资中县| 凤阳县| 威信县| 桑植县| 库尔勒市| 潢川县| 巴中市| 河津市| 无锡市| 南昌市| 旺苍县| 泽库县| 平罗县| 保定市| 长白| 视频| 布尔津县| 盘锦市| 建宁县| 宾阳县| 漯河市| 内江市| 黄骅市| 莆田市| 财经|