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

熱AI工具

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

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

Undress AI Tool
免費脫衣圖片

Clothoff.io
AI脫衣器

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

熱門文章

熱工具

記事本++7.3.1
好用且免費的程式碼編輯器

SublimeText3漢化版
中文版,非常好用

禪工作室 13.0.1
強大的PHP整合開發環境

Dreamweaver CS6
視覺化網頁開發工具

SublimeText3 Mac版
神級程式碼編輯軟體(SublimeText3)

PHP主要是過程式編程,但也支持面向對象編程(OOP);Python支持多種範式,包括OOP、函數式和過程式編程。 PHP適合web開發,Python適用於多種應用,如數據分析和機器學習。

PHP適合網頁開發和快速原型開發,Python適用於數據科學和機器學習。 1.PHP用於動態網頁開發,語法簡單,適合快速開發。 2.Python語法簡潔,適用於多領域,庫生態系統強大。

在 Sublime Text 中運行 Python 代碼,需先安裝 Python 插件,再創建 .py 文件並編寫代碼,最後按 Ctrl B 運行代碼,輸出會在控制台中顯示。

PHP起源於1994年,由RasmusLerdorf開發,最初用於跟踪網站訪問者,逐漸演變為服務器端腳本語言,廣泛應用於網頁開發。 Python由GuidovanRossum於1980年代末開發,1991年首次發布,強調代碼可讀性和簡潔性,適用於科學計算、數據分析等領域。

Python更適合初學者,學習曲線平緩,語法簡潔;JavaScript適合前端開發,學習曲線較陡,語法靈活。 1.Python語法直觀,適用於數據科學和後端開發。 2.JavaScript靈活,廣泛用於前端和服務器端編程。

Golang在性能和可擴展性方面優於Python。 1)Golang的編譯型特性和高效並發模型使其在高並發場景下表現出色。 2)Python作為解釋型語言,執行速度較慢,但通過工具如Cython可優化性能。

在 Visual Studio Code(VSCode)中編寫代碼簡單易行,只需安裝 VSCode、創建項目、選擇語言、創建文件、編寫代碼、保存並運行即可。 VSCode 的優點包括跨平台、免費開源、強大功能、擴展豐富,以及輕量快速。

在 Notepad 中運行 Python 代碼需要安裝 Python 可執行文件和 NppExec 插件。安裝 Python 並為其添加 PATH 後,在 NppExec 插件中配置命令為“python”、參數為“{CURRENT_DIRECTORY}{FILE_NAME}”,即可在 Notepad 中通過快捷鍵“F6”運行 Python 代碼。
