WebSocket簡介
WebSocket協議是由HTML5定義的,基於TCP協議實現的一種網絡協議,它實現了客戶端與服務器全雙工通信。也就是說通過該協議服務器可以主動發送信息給客戶端。
何謂全雙工
信息只能單向傳送爲單工;信息能雙向傳送但不能同時雙向傳送稱爲半雙工,信息能夠同時雙向傳送則稱爲全雙工。
基本實現原理
WebSocket協議基於TCP協議實現,客戶端和服務器只需要做一個握手的動作之後,形成了一條基於客戶端和服務器之間的快速通道。後續兩者之間便可以進行多次數據幀雙向傳輸過程。
這樣實現的目的是客戶端和服務器進行頻繁雙向通信時,可以使服務器避免打開多個HTTP連接進行工作來節約資源,提高工作效率和資源利用率。
傳統Web推送實現
在沒有WebSocket協議之前,服務器如何向瀏覽器端推送消息?
此時,通常的實現方式是在頁面通過Ajax定時輪詢,比如每隔1秒中向服務器發送一次HTTP請求,詢問服務器是否有新消息,服務器返回結果。
這種形式缺點很明顯,也就是說瀏覽器需要不斷的向服務器發出HTTP請求,而HTTP請求包含較長的頭部,有效信息相對較少,這樣會造成很大的浪費。
再試想一下,如果同時打開很多瀏覽器頁面,同時每個請求都會出現阻塞請求,會對服務器造成一定的併發量和資源浪費。
因此,HTML5定義的WebSocket協議,能更好的節省服務器資源和帶寬,並且能夠更實時地進行通訊。
WebSocket協議本質上是一個基於TCP的協議,因此與HTTP協議沒有什麼關係。
WebSocket的特點
基於上面所述WebSocket的機制,它擁有以下特點:
- 首先最大的特點就是:開通了雙工異步通信的功能,客戶端和服務器可以雙向平等對話。
- 建立在TCP協議之上,服務器端的實現比較容易。
- 與HTTP協議有着良好的兼容性。默認端口也是80和443,並且握手階段採用HTTP協議,因此握手時不容易屏蔽,能通過各種HTTP代理服務器。
- 數據格式比較輕量,性能開銷小,通信高效。
- 更好的二進制支持,可以發送文本,也可以發送二進制數據。
- 更強的時效性。
Spring Boot支持
在Spring Boot 2.x中專門添加了針對WebSocket的功能的start,可以快速集成。同時基於註解形式,可以快速實現WebSocket服務器端的功能。
小結
本篇文章我們瞭解了WebSocket相關的概念、原理、誕生條件以及特點。在瞭解完以上基礎知識之後,後面我們將通過兩種形式(基於WebSocket協議和基於STOMP協議)的實例來展示如何在Spring Boot中使用WebSocket。