Spring Boot學習筆記(六) WebSocket

WebSocket

什麼是WebSocket?

WebSocket爲瀏覽器和服務端提供了雙工異步通信的功能,即瀏覽器可以向服務端發送消息,服務端也可以向瀏覽器發送消息。

WebSocket需要瀏覽器的支持,如IE 10+、Chrome 13+、Firefox 6+……

WebSocket是通過一個socket來實現雙工異步通信能力的。但是直接使用WebSocket(或者SockJS:WebSocket協議的模擬,增加了當瀏覽器不支持WebSocket的時候的兼容支持)

協議開發程序顯得特別繁瑣,我們會使用它的子協議STOMP,它是一個更高級別的協議,STOMP協議使用一個基於幀(frame)的格式定義消息,與HTTP的request和response類似(具有類似於@RequestMapping的@MessageMapping)

Spring Boot 提供的自動配置

Spring Boot 對內嵌的Tomcat(7或者8)、Jetty9和Undertow使用WebSocket提供了支持。
配置源碼存於org.springframework.boot.autoconfigure.websocket下:

這裏寫圖片描述

Spring Boot爲WebSocket提供的starter pom是spring-boot-starter-websocket

廣播式:

廣播式即服務端有消息時,會發消息發送給所有連接了當前endpoint的瀏覽器。

(1)配置WebSocket,需要在配置類上使用@EnableWebSocketMessageBroker開啓WebSocket支持,並通過AbstractWebSocketMessageBrokerConfigurer類,重寫其方法來配置WebSocket。

這裏寫圖片描述

(2)瀏覽器向服務端發送的消息用此類接收

這裏寫圖片描述

(3)服務器向瀏覽器發送的此類的消息:

這裏寫圖片描述

(4)演示控制器:

這裏寫圖片描述

(5)添加腳本。將stomp.min.js(STOMP協議的客戶端腳本)、sockjs.min.js(SockJS的客戶端腳本)以及jQuery放置在src/main/resources/static下。

這裏寫圖片描述

(6)演示頁面(在src/main/resources/templates下新建ws.html)

這裏寫圖片描述
這裏寫圖片描述
這裏寫圖片描述

(7)配置viewController,爲ws.html提供便捷的路徑映射:

這裏寫圖片描述

(8)運行。結果發現:當一個瀏覽器發送一個消息到服務端時,其他瀏覽器也能接收到從服務端發送來的這個消息。

(9)在Chrome瀏覽器下觀察STOMP的幀(也可以從控制檯上打印的data數據來看)

這裏寫圖片描述

連接服務端的格式爲:

這裏寫圖片描述

連接成功的返回爲:

這裏寫圖片描述

向目標(destination)/welcome 發送消息的格式爲:

這裏寫圖片描述

紅色框中就是要發送的消息。

從目標(destination)/topic/getReponse:

這裏寫圖片描述

從目標(destination)/topic/getResponse接收的格式爲:

這裏寫圖片描述

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章