SpringBoot2.x系列教程(四十四)WebSocket基礎知識簡介

  • 2020 年 3 月 18 日
  • 筆記

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。