日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 前端技术 > javascript >内容正文

javascript

springboot websocket_SpringBoot 集成 WebSocket 实现前后端消息互传

發布時間:2025/3/19 javascript 23 豆豆
生活随笔 收集整理的這篇文章主要介紹了 springboot websocket_SpringBoot 集成 WebSocket 实现前后端消息互传 小編覺得挺不錯的,現在分享給大家,幫大家做個參考.

WebSocket 協議是基于 TCP 的一種新的網絡協議。它實現了瀏覽器與服務器全雙工 (full-duplex) 通信—允許服務器主動發送信息給客戶端。

為什么需要WebSocket?

大家都知道以前客戶端想知道服務端的處理進度,要不停地使用 Ajax 進行輪詢,讓瀏覽器隔個幾秒就向服務器發一次請求,這對服務器壓力較大。另外一種輪詢就是采用 long poll 的方式,這就跟打電話差不多,沒收到消息就一直不掛電話,也就是說,客戶端發起連接后,如果沒消息,就一直不返回 response 給客戶端,連接階段一直是阻塞的。

而 WebSocket 解決了 HTTP 的這幾個難題。當服務器完成協議升級后( HTTP -> WebSocket ),服務端可以主動推送信息給客戶端,解決了輪詢造成的同步延遲問題。由于 WebSocket 只需要一次 HTTP 握手,服務端就能一直與客戶端保持通信,直到關閉連接,這樣就解決了服務器需要反復解析 HTTP 協議,減少了資源的開銷。

現在通過 SpringBoot 集成 WebSocket 來實現前后端通信。

集成 WebSocket 實現前后端通信

項目代碼結構圖

依賴導入

SpringBoot2.0 對 WebSocket 的支持簡直太棒了,直接就有包可以引入 。

org.springframework.boot spring-boot-starter-websocket

配置 WebSocketConfig

啟用WebSocket的支持也是很簡單,將ServerEndpointExporter對象注入到容器中。

package com.tuhu.websocketsample.configuration;import org.springframework.context.annotation.Bean;import org.springframework.context.annotation.Configuration;import org.springframework.web.socket.server.standard.ServerEndpointExporter;@Configurationpublic class WebSocketConfig { @Bean public ServerEndpointExporter serverEndpointExporter() { return new ServerEndpointExporter(); }}

WebSocket 服務端 WebSocketServer

因為 WebSocket 是類似客戶端服務端的形式(采用ws協議),那么這里的 WebSocketServer 其實就相當于一個 ws協議的 Controller。直接 @ServerEndpoint("/websocket") 、@Component 啟用即可,然后在里面實現@OnOpen , @onClose ,@onMessage等方法

package com.tuhu.websocketsample.controller;import lombok.extern.slf4j.Slf4j;import org.springframework.stereotype.Component;import javax.websocket.*;import javax.websocket.server.PathParam;import javax.websocket.server.ServerEndpoint;import java.io.IOException;import java.util.concurrent.CopyOnWriteArraySet;@Component@ServerEndpoint("/websocket/{sid}")@Slf4jpublic class WebSocketServer { /** * 靜態變量,用來記錄當前在線連接數。應該把它設計成線程安全的。 */ private static int onlineCount = 0; /** * concurrent包的線程安全Set,用來存放每個客戶端對應的MyWebSocket對象。 */ private static CopyOnWriteArraySet webSocketSet = new CopyOnWriteArraySet<>(); /** * 與某個客戶端的連接會話,需要通過它來給客戶端發送數據 */ private Session session; /** * 接收sid */ private String sid=""; /** * 連接建立成功調用的方法 **/ @OnOpen public void onOpen(Session session,@PathParam("sid") String sid) { this.session = session; //加入set中 webSocketSet.add(this); //在線數加1 addOnlineCount(); log.info("有新窗口開始監聽:"+sid+

總結

以上是生活随笔為你收集整理的springboot websocket_SpringBoot 集成 WebSocket 实现前后端消息互传的全部內容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。