天天看點

性能工具之Jmeter壓測WebSocket接口

WebSocket是web用戶端和伺服器之間新的通訊方式,依然架構在HTTP協定之上。使用WebSocket連接配接,web應用程式可以執行實時的互動,而不是以前的poll方式。

WebSocket是HTML5開始提供的一種在單個TCP連接配接上進行全雙工通訊的協定,可以用來建立快速的更大規模的健壯的高性能實時的web應用程式。在WebSocket API中,浏覽器和伺服器隻需要做一個握手的動作,然後浏覽器和伺服器之間就形成了一條快速通道。兩者之間就直接可以資料互相傳送。

一個WebSocket是通過一個獨立的TCP連接配接實作的、異步的、雙向的、全雙工的消息傳遞實作機制。WebSockets不是一個HTTP連接配接,卻使用HTTP來引導一個WebSocket連接配接。一個全雙工的系統允許同時進行雙向的通訊。有線電話是一個全雙工設施的例子,因為它們允許兩個通話者同時講話并被對方聽到。

WebSocket協定利用HTTP更新頭資訊來把一個HTTP連接配接更新為一個WebSocket連接配接。HTML5 WebSockets 解決了許多導緻HTTP不适合于實時應用的問題,并且它通過避免複雜的工作方式使得應用結構很簡單。

目前絕大多數的浏覽器都支援WebSockets

每一個WebSocket連接配接的生命都是從一個HTTP請求開始的。HTTP請求跟其他請求很類似,除了它擁有一個Upgrade頭資訊。Upgrade頭資訊表示一個用戶端希望把連接配接更新為不同的協定。對WebSockets來說,它希望更新為WebSocket協定。當用戶端和伺服器通過底層連接配接第一次握手時,WebSocket連接配接通過把HTTP協定轉換更新為WebSockets協定而得以建立。一旦WebSocket連接配接成功建立,消息就可以在用戶端和伺服器之間進行雙向發送 

性能工具之Jmeter壓測WebSocket接口

而websocket請求和伺服器互動的如下圖所示:

性能工具之Jmeter壓測WebSocket接口

由上圖可知,websocket隻要建立連接配接,之後用戶端與伺服器的通訊完全是自由的,用戶端可以主動發送消息,同理服務端也可以主動進行消息推送。而http請求隻能一個request對應一個response,是以服務端不能做到真正意義上的主動發送消息。而且連接配接建立起後隻需要通過資料幀來進行傳輸,幀的頭部資訊遠比http當中的head小多了,會節省大量的帶寬。更适合做長時間的資料傳輸。但其缺點就是需要一直維持連接配接,是以對于伺服器的端口資源消耗較大。

WebSockets優點: 

WebSockets比其它工作方式比如輪詢更有效也更高效。因為它需要更少的帶寬并且降低了延時。 

WebSockets簡化了實時應用的結構體系。 

WebSockets在點到點發送消息時不需要頭資訊。這顯著的降低了帶寬。

WebSockets使用案例: 

聊天應用、多人遊戲、股票交易和金融應用、文檔合作編輯、社交應用

Oracle 釋出的 java的WebSocket 的規範是JSR356規範 ,Tomcat從7.0.27開始支援WebSocket,從7.0.47開始支援JSR-356。

怎麼建立你的第一個WebSocket應用呢? 

基本上我們會使用Javascript API編寫WebSocket用戶端,在伺服器端,本文使用JSR 356規範定義的通用模式和技術處理WebSocket的通訊。

性能工具之Jmeter壓測WebSocket接口

在 ​<code>​pom.xml​</code>​中添加相關的包

有兩種建立伺服器端代碼的方法:

注解方式Annotation-driven: 通過在Pojo加上注解, 開發者就可以處理WebSocket 生命周期事件

實作接口方式Interface-driven: 開發者可以實作Endpoint接口和聲明周期的各個方法.

一般開發時采用注解方式 這樣可以使用Pojo就可以實作WebSocket Endpoint. 而且不限定處理事件的方法名。代碼也更簡單。

本例就采用注解的方式接收WebSocket請求的類是一個Pojo, 通過@ServerEndpoint标注釋出服務。 這個注解告訴容器此類應該被當作一個WebSocket的Endpoint。value值就是WebSocket endpoint的path。

注意: 

這個例子還包括了其它幾個回調函數:

@OnOpen标注的方法在WebSocket連接配接開始時被調用,Web Session作為參數。

@OnClose标注的方法在連接配接關閉時被調用。

@OnMessage标準的方法在收到消息時執行。

@OnError在連接配接錯誤時執行。

就是這麼簡單,我們這個WebSocket服務它會在容器Tomcat 8上釋出。

打開chrome,在console裡面測試

性能工具之Jmeter壓測WebSocket接口

服務端日志:

性能工具之Jmeter壓測WebSocket接口

我們可以看到發送的字元串被服務端成功傳回了,測試成功~

可以關注公衆号:7DGroup

繼續閱讀