近期項目須要對基於websocket的協議進行壓力測試。做爲小白的我,聽到這樣的消息,首先先去了解這個協議,而後肯定使用的工具。html
1、websocket協議介紹python
先簡單介紹一下這個協議。web
首先,Websocket是一個持久化的協議,相對於HTTP這種非持久的協議來講。
簡單的舉個例子吧,用目前應用比較普遍的PHP生命週期來解釋。
HTTP的生命週期經過Request來界定,也就是一個Request 一個Response,那麼在HTTP1.0中,此次HTTP請求就結束了。
在HTTP1.1中進行了改進,使得有一個keep-alive,也就是說,在一個HTTP鏈接中,能夠發送多個Request,接收多個Response。
可是請記住 Request = Response , 在HTTP中永遠是這樣,也就是說一個request只能有一個response。並且這個response也是被動的,不能主動發起。
首先Websocket是基於HTTP協議的,或者說借用了HTTP的協議來完成一部分握手。
在握手階段是同樣的
首先咱們來看個典型的Websocket握手(借用Wikipedia的。。安全
WebSocket握手協議
一、客戶端握手請求(注意:鍵值之間有一個空格,行間有換行符號0x13x10或者說\r\n)服務器
[python] view plain copywebsocket
二、服務端握手回覆session
[python] view plain copyapp
2、Jmeter測試webocket協議socket
Jmeter自己不支持websocket協議的,因此須要安裝第三方的插件還有6個依賴包。連接: http://pan.baidu.com/s/1kV8QmN1 密碼: hx2v ide
安裝方式很簡單,解壓完成之後直接放到jmeter的\lib\ext\目錄下。而後重啓Jmeter就OK了。
而後再採樣那裏就能夠看到websocket了
接下來看看websocket的頁面
解釋一下各項的意思
一、WebServer
(1)Server Name or IP:WebSocket發送的目標服務器的地址或者名稱
(2)Port Number:WebSocker服務器監聽的端口號。(通常是HTTP 80端口,能夠經過WireShark數據包獲得)
二、Timeout:
(1)Connection – 發送一個鏈接請求後,Jmeter等待鏈接完成的最長時間,單位是毫秒。
(2)Response - 對響應消息的最大等待時間。
三、WebSocket Request
(1)Implementation – 只支持RFC6455(v13) ,WebSocket協議標準的最新版。
(2)Protocol – 有ws與wss之分, ws前綴是WebSocket鏈接的辨別標識,wss前綴是WebSocket安全鏈接的辨別標識。根據本身的實際狀況填寫
(3)Streaming Connection – 選擇這個TCP session要不要保持,若是勾上標識鏈接會一直存在,若是沒有勾上,那麼獲得第一次響應後該連接就會被關閉。
(4)Request data:填入將要發送的請求,要跟開發溝通好,這個是什麼格式的消息。
4.WebSocket Response
(1)Response Pattern – 採樣器將等待含有該標識的消息並繼續通訊(或者直到timeout,該鏈接關閉)
(2)Close Connection Pattern – 若是服務器返回的消息含有這樣的字符,就結束會話。
(3)Message Backlog – 定義服務器返回消息保留的最大長度。
3、Jmeter測試
找個環境測試一下http://www.websocket.org/echo.html
運行而後查看結果就OK了。