搜尋
首頁後端開發Python教學Python的Tornado之WebSocket的概念以及應用介紹

這篇文章帶給大家的內容是關於Python的Tornado之WebSocket概念及應用介紹,有一定的參考價值,有需要的朋友可以參考一下,希望對你有所幫助。

Tornado的非同步特性使得其非常適合伺服器的高並發處理,客戶端與伺服器的持久連接應用框架就是高並發的典型應用。而WebSocket正是在HTTP客戶端與伺服器之間建立持久連線的HTML5標準技術。本章將說明WebSocket技術在Tornado框架中的應用。
WebSocket protocol是HTML5定義的一種新的標準協定(RFC6455),它實作了瀏覽器與伺服器的雙全工通訊(full-duplex)。

1、WebSocket的應用程式場景

傳統的HTTP和HTML技術使用用戶端主動向伺服器發送請求並取得回應。但是隨著即時通訊需求的增多,這樣的通訊模式有時並不能滿足應用的需求。

WebSocket與普通的Socket通訊類似,它打破了原來HTTP的Request和Response一對一的通訊模型,同時打破了伺服器只能被動地接受客戶端請求的應用場景。也許讀者聽過Ajax、Long poll等基於傳統HTTP的動態用戶端技術,但這些技術無不採用輪詢技術,耗費了大量的網路頻寬和運算資源。

而WebSocket正是為了應對這樣的場景而製定的HTML5標準,相對於普通的Socket通信,WebSocket又在應用層定義了基本的交互流程,使得Tornado這樣的伺服器框架和JavaScript客戶端可以建構出標準的WebSocket模組。

總結WebSocket的特點如下:

  • WebSocket適合服務端主動推送的場景。

  • 相對於Ajax和Long poll等技術,WebSocket通訊模型更有效率。

  • WebSocket仍然與HTTP完成Internet通訊。

  • 因為是HTML5的標準協議,所以不受企業防火牆的攔截。

2、WebSocket的通訊原理

WebSocket的通訊原理是在客戶端與伺服器之間建立TCP持久鏈接,從而使得當伺服器有訊息需要推送給客戶端時能夠進行即時通訊。

雖然WebSocket不是HTTP,但由於在Internet上HTML本事是由HTTP封裝並進行傳輸的,所以WebSocket仍然需要與HTTP進行協作。 IETF在RFC6455中定義了基於HTTP連結建立WebSocket頻道的標準流程。

客戶端透過發送以下HTTP Request告訴伺服器需要建立一個WebSocket長連結頻道:

GET /stock_info/?encoding=text HTTP/1.1
Host:echo.websocket.org
Origin:http://websocket.org
Cookie:__token=ubcxx13
Connection:Upgrade
Sec-WebSocket-Key:uRovscZjNol/umbTt5uKmw==
Upgrade:websocket
Sec-WebSocket-Version:13

讀者可以發現其仍然是一個HTTP Request包,並對其中的內容非常熟悉。

  • HTTP請求方式:GET

  • #請求位址:/stock_info

  • HTTP版本編號: 1.1

  • 伺服器主機網域:echo.websocket.org

  • Cookie資訊:__token=ubcxx13

#但是在HTTP Header中出現了4個特色的字段,他們是:

Connection:Upgrade
Sec-WebSocket-Key:uRovscZjNol/umbTt5uKmw==
Upgrade:websocket
Sec-WebSocket-Version:13

這就是WebSocket建立鏈路的核心,它告訴Web伺服器:客戶端希望建立一個WebSocket鏈接,客戶端使用的WebSocket版本時13,金鑰是uRovscZjNol/umbTt5uKmw==。

伺服器在收到該Request後,如果同意建立WebSocket連結則傳回類似如下的Response:

HTTP/1.1 101 WebSocket Protocol Handshake
Date:Fri,10 Feb 2012 17:38:18 GMT
Connection:Upgrade
Server:Kaazing Gateway
Upgrade:WebSocket
Access-Control-Allow-Origin:http://websocket.org
Access-Contril-Allow-Credentials:true
Sec-WebSocket-Accept:rLHCKw/SKs09GAH/ZSFhBATDKrU=
Access-Control-Allow-Headers:content-type

這依舊是一個標準的HTTP Response,其中與WebSocket相關的Header資訊是:

Connection:Upgrade
Upgrade:WebSocket
Sec-WebSocket-Accept:rLHCKw/SKs09GAH/ZSFhBATDKrU=

前面的兩個資料告訴客戶端:伺服器已經將本連線轉換為WebSocket連結。而Sec-WebSocket-Accept是將客服端發送的Sec-WebSocket-Key加密後產生的數據,以讓客服端確認伺服器能夠正常運作。

至此,在客戶端與伺服器之間已經建立了一個TCP持久鏈接,雙發已經可以隨時向對方發送訊息。

以上是Python的Tornado之WebSocket的概念以及應用介紹的詳細內容。更多資訊請關注PHP中文網其他相關文章!

陳述
本文轉載於:segmentfault思否。如有侵權,請聯絡admin@php.cn刪除
我們可以在Python中傳遞作為參數的函數嗎?我們可以在Python中傳遞作為參數的函數嗎?Apr 28, 2025 pm 04:23 PM

文章討論了將功能作為Python中的參數,突出了模塊化和用例(例如分類和裝飾器)等好處。

您如何在Python上鋪上一個數字?您如何在Python上鋪上一個數字?Apr 28, 2025 pm 04:20 PM

文章討論了從數學模塊到圓形數量向下的Python的Floor()函數,將其與Round()函數進行比較,及其與負數的使用。

Python的變量範圍是什麼?Python的變量範圍是什麼?Apr 28, 2025 pm 04:19 PM

本文討論了Python中的可變範圍,詳細介紹了本地和全局範圍,以及範圍對可變可訪問性的影響。它突出了常見的錯誤,以避免有效的代碼管理。

Python是否需要凹痕?Python是否需要凹痕?Apr 28, 2025 pm 04:15 PM

Python需要縮進來定義代碼塊,與使用牙套的其他語言不同。不正確的凹痕會導致語法錯誤,邏輯問題和可讀性問題。 IDE和Linters之類的工具有助於管理它。

什麼是動態打字的語言?什麼是動態打字的語言?Apr 28, 2025 pm 04:14 PM

本文討論了動態鍵入的語言,其中類型檢查在運行時發生,與靜態鍵入語言形成鮮明對比。它檢查了靈活性和快速發展等優勢,並影響軟件開發和維護

Python是編譯語言還是解釋的語言?Python是編譯語言還是解釋的語言?Apr 28, 2025 pm 04:13 PM

Python主要是一種解釋的語言,影響其性能,開發速度和跨平台兼容性。本文討論了Python解釋過程及其對這些方面的影響的細微差別。

Python腳本可能無法在UNIX上執行的一些常見原因是什麼?Python腳本可能無法在UNIX上執行的一些常見原因是什麼?Apr 28, 2025 am 12:18 AM

Python腳本在Unix系統上無法運行的原因包括:1)權限不足,使用chmod xyour_script.py賦予執行權限;2)Shebang行錯誤或缺失,應使用#!/usr/bin/envpython;3)環境變量設置不當,可打印os.environ調試;4)使用錯誤的Python版本,可在Shebang行或命令行指定版本;5)依賴問題,使用虛擬環境隔離依賴;6)語法錯誤,使用python-mpy_compileyour_script.py檢測。

舉一個場景的示例,其中使用Python數組比使用列表更合適。舉一個場景的示例,其中使用Python數組比使用列表更合適。Apr 28, 2025 am 12:15 AM

使用Python數組比列表更適合處理大量數值數據。 1)數組更節省內存,2)數組對數值運算更快,3)數組強制類型一致性,4)數組與C語言數組兼容,但在靈活性和便捷性上不如列表。

See all articles

熱AI工具

Undresser.AI Undress

Undresser.AI Undress

人工智慧驅動的應用程序,用於創建逼真的裸體照片

AI Clothes Remover

AI Clothes Remover

用於從照片中去除衣服的線上人工智慧工具。

Undress AI Tool

Undress AI Tool

免費脫衣圖片

Clothoff.io

Clothoff.io

AI脫衣器

Video Face Swap

Video Face Swap

使用我們完全免費的人工智慧換臉工具,輕鬆在任何影片中換臉!

熱工具

WebStorm Mac版

WebStorm Mac版

好用的JavaScript開發工具

DVWA

DVWA

Damn Vulnerable Web App (DVWA) 是一個PHP/MySQL的Web應用程序,非常容易受到攻擊。它的主要目標是成為安全專業人員在合法環境中測試自己的技能和工具的輔助工具,幫助Web開發人員更好地理解保護網路應用程式的過程,並幫助教師/學生在課堂環境中教授/學習Web應用程式安全性。 DVWA的目標是透過簡單直接的介面練習一些最常見的Web漏洞,難度各不相同。請注意,該軟體中

ZendStudio 13.5.1 Mac

ZendStudio 13.5.1 Mac

強大的PHP整合開發環境

Atom編輯器mac版下載

Atom編輯器mac版下載

最受歡迎的的開源編輯器

Dreamweaver CS6

Dreamweaver CS6

視覺化網頁開發工具