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中文網其他相關文章!

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

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

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

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

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

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


熱AI工具

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

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

Undress AI Tool
免費脫衣圖片

Clothoff.io
AI脫衣器

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

熱門文章

熱工具

WebStorm Mac版
好用的JavaScript開發工具

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

ZendStudio 13.5.1 Mac
強大的PHP整合開發環境

Atom編輯器mac版下載
最受歡迎的的開源編輯器

Dreamweaver CS6
視覺化網頁開發工具