WebSocket接口測試


一.為什么需要 WebSocket?

首先需要知道WebSocket 是一種網絡通信協議,很多高級功能都需要它。初次接觸 WebSocket 的人,都會問同樣的問題:我們已經有了 HTTP 協議,為什么還需要另一個協議?它能帶來什么好處?答案很簡單,因為 HTTP 協議有一個缺陷:通信只能由客戶端發起。

舉例來說,我們想了解今天的天氣,只能是客戶端向服務器發出請求,服務器返回查詢結果。HTTP 協議做不到服務器主動向客戶端推送信息。

 

這種單向請求的特點,注定了如果服務器有連續的狀態變化,客戶端要獲知就非常麻煩。我們只能使用“輪詢”:每隔一段時候,就發出一個詢問,了解服務器有沒有新的信息。最典型的場景就是聊天室。但是輪詢的效率低,非常浪費資源(因為必須不停連接,或者 HTTP 連接始終打開)。因此,WebSocket 就是應用而生了。

二.WebSocket簡介

WebSocket 協議在2008年誕生,2011年成為國際標准。所有瀏覽器都已經支持了。

它的最大特點就是,服務器可以主動向客戶端推送信息,客戶端也可以主動向服務器發送信息,是真正的雙向平等對話,屬於服務器推送技術的一種。

其他特點包括:

(1)建立在 TCP 協議之上,服務器端的實現比較容易。

(2)與 HTTP 協議有着良好的兼容性。默認端口也是80和443,並且握手階段采用 HTTP 協議,因此握手時不容易屏蔽,能通過各種 HTTP 代理服務器。

(3)數據格式比較輕量,性能開銷小,通信高效。

(4)可以發送文本,也可以發送二進制數據。

(5)沒有同源限制,客戶端可以與任意服務器通信。

(6)協議標識符是ws(如果加密,則為wss),服務器網址就是 URL。

ws://example.com:80/some/path

三.webSocket 握手協議

在WebSocket API 中,瀏覽器和服務器只需要完成一次握手,兩者之間就直接可以創建持久性的連接,並進行雙向數據傳輸。webSocket請求和通常的 HTTP 請求很相似,但是其中有些內容是和 WebSocket 協議密切相關的。我們需要簡單介紹一下這些請求和應答信息,”Upgrade:WebSocket”表示這是一個特殊的 HTTP 請求,請求的目的就是要將客戶端和服務器端的通訊協議從 HTTP 協議升級到 WebSocket 協議。從客戶端到服務器端請求的信息里包含有”Sec-WebSocket-Key”這樣的頭信息。這是客戶端瀏覽器需要向服務器端提供的握手信息,服務器端解析這些頭信息,並在握手的過程中依據這些信息生成一個 16 位的安全密鑰並返回給客戶端,以表明服務器端獲取了客戶端的請求,同意創建 WebSocket 連接。一旦連接建立,客戶端和服務器端就可以通過這個通道雙向傳輸數據了。

四.webscoket的屬性、方法和事件

 

 

 五.使用python進行websocket接口測試

需要安裝websocket的模塊

pip install websocket-client

由於目前我們還沒有一個適用的 WebSocket 服務器環境配置於本地,所以可以借助於網站:http://www.websocket.org/echo.html 來幫助我們完成一個簡單的 WebSocket 通信。打開Fiddler 對瀏覽器進行監控,然后打開該網頁,點擊Connect按鈕可以通過 WebSocket 協議連接到其服務器ws://echo.websocket.org。當日志顯示連接成功后(即顯示:CONNECTED),在Message 文本框內輸入任意內容發送,發送后再點擊Disconnect關閉連接。

在 Fidder 中只監控到一個 HTTP 請求。這一個請求即為 WebSocket 借助於 HTTP 協議建立與服務器連接的請求,而連接建立成功后,發送消息和接受響應的 WebSocket 本身的協議請求,則不會在 Fidder 中形成新的請求,而是直接基於該請求下進行不停地 Ping/Pong 操作和發送數據。

使用python完成剛才的測試

import websocket,json
url = 'ws://echo.websocket.org/?encoding=text'  #websocket連接地址
ws = websocket.create_connection(url)  #創建連接
ws.send("這是webservice測試")   #json轉化為字符串,必須轉化
print(ws.recv())    #服務器響應數據
ws.close()   #關閉連接


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM