最新国产好看的视频,伊人天堂AV在线,国产Aaaaaa视频,蜜臀视频在线观看一区,人妻av色图,密臀久久久精品影片,青青视频免费观看毛片,久草在线观看视,国产三级精品色情在线

SpringBoot整合WebSocket實現(xiàn)后端向前端主動推送消息方式

 更新時間:2022年10月31日 10:47:42   作者:z.haoui  
這篇文章主要介紹了SpringBoot整合WebSocket實現(xiàn)后端向前端主動推送消息方式,具有很好的參考價值,希望對大家有所幫助。如有錯誤或未考慮完全的地方,望不吝賜教

一、引入websocket依賴

<dependency>
? ? <groupId>org.springframework.boot</groupId>
? ? <artifactId>spring-boot-starter-websocket</artifactId>
</dependency>

二、WebSocket配置

@Configuration
public class WebSocketConfig {
? ? @Bean
? ? public ServerEndpointExporter serverEndpointExporter() {
? ? ? ? return new ServerEndpointExporter();
? ? }
}

三、WebSocket服務(wù)

(前端連接地址ws://ip:端口/websocket,請自行替換ip、端口和接口名稱)

@ServerEndpoint(value = "/websocket")
@Component
public class WebSocketServer {
? ? private final static Logger log = LoggerFactory.getLogger(WebSocketServer.class);
?
? ? //靜態(tài)變量,用來記錄當前在線連接數(shù)。應(yīng)該把它設(shè)計成線程安全的。
? ? private static int onlineCount = 0;
? ? //concurrent包的線程安全Set,用來存放每個客戶端對應(yīng)的MyWebSocket對象。
? ? private static CopyOnWriteArraySet<WebSocketServer> webSocketSet = new CopyOnWriteArraySet<WebSocketServer>();
?
? ? //與某個客戶端的連接會話,需要通過它來給客戶端發(fā)送數(shù)據(jù)
? ? private Session session;
?
? ? /**
? ? ?* 連接建立成功調(diào)用的方法
? ? ?*/
? ? @OnOpen
? ? public void onOpen(Session session) {
? ? ? ? this.session = session;
? ? ? ? //加入set中
? ? ? ? webSocketSet.add(this);
? ? ? ? //在線數(shù)加1
? ? ? ? addOnlineCount();
? ? ? ? log.info("有新連接加入!當前在線人數(shù)為" + getOnlineCount());
? ? ? ? try {
? ? ? ? ? ? sendMessage("連接成功");
? ? ? ? } catch (IOException e) {
? ? ? ? ? ? log.error("websocket IO異常");
? ? ? ? }
? ? }
?
? ? /**
? ? ?* 連接關(guān)閉調(diào)用的方法
? ? ?*/
? ? @OnClose
? ? public void onClose() {
? ? ? ? //從set中刪除
? ? ? ? webSocketSet.remove(this);
? ? ? ? //在線數(shù)減1
? ? ? ? subOnlineCount();
? ? ? ? log.info("有一連接關(guān)閉!當前在線人數(shù)為" + getOnlineCount());
? ? }
?
? ? /**
? ? ?* 收到客戶端消息后調(diào)用的方法
? ? ?*
? ? ?* @param message 客戶端發(fā)送過來的消息
? ? ?*/
? ? @OnMessage
? ? public void onMessage(String message, Session session) {
? ? ? ? log.info("來自客戶端的消息:" + message);
?
? ? ? ? //群發(fā)消息
? ? ? ? for (WebSocketServer item : webSocketSet) {
? ? ? ? ? ? try {
? ? ? ? ? ? ? ? item.sendMessage(message);
? ? ? ? ? ? } catch (IOException e) {
? ? ? ? ? ? ? ? e.printStackTrace();
? ? ? ? ? ? }
? ? ? ? }
? ? }
?
? ? /**
? ? ?* @param session
? ? ?* @param error
? ? ?*/
? ? @OnError
? ? public void onError(Session session, Throwable error) {
? ? ? ? log.error("發(fā)生錯誤");
? ? ? ? error.printStackTrace();
? ? }
?
? ? public void sendMessage(String message) throws IOException {
? ? ? ? this.session.getBasicRemote().sendText(message);
? ? }
?
? ? /**
? ? ?* 群發(fā)自定義消息
? ? ?*/
? ? public static void sendInfo(String message) throws IOException {
? ? ? ? log.info(message);
? ? ? ? for (WebSocketServer item : webSocketSet) {
? ? ? ? ? ? try {
? ? ? ? ? ? ? ? item.sendMessage(message);
? ? ? ? ? ? } catch (IOException e) {
? ? ? ? ? ? ? ? continue;
? ? ? ? ? ? }
? ? ? ? }
? ? }
?
? ? public static synchronized int getOnlineCount() {
? ? ? ? return onlineCount;
? ? }
?
? ? public static synchronized void addOnlineCount() {
? ? ? ? WebSocketServer.onlineCount++;
? ? }
?
? ? public static synchronized void subOnlineCount() {
? ? ? ? WebSocketServer.onlineCount--;
? ? }
}

四、消息推送

后端調(diào)用WebServer的sendInfo接口(例如:WebSocketServer.sendInfo("Hello World");)實現(xiàn)主動向前端推送消息

以上為個人經(jīng)驗,希望能給大家一個參考,也希望大家多多支持腳本之家。

相關(guān)文章

  • 淺談JVM垃圾回收有哪些常用算法

    淺談JVM垃圾回收有哪些常用算法

    今天給大家?guī)淼氖顷P(guān)于Java虛擬機的相關(guān)知識,文章圍繞著JVM垃圾回收有哪些常用算法展開,文中有非常詳細的介紹及代碼示例,需要的朋友可以參考下
    2021-06-06
  • Java實戰(zhàn)項目之校園跑腿管理系統(tǒng)的實現(xiàn)

    Java實戰(zhàn)項目之校園跑腿管理系統(tǒng)的實現(xiàn)

    只有理論是不夠的,只有在實戰(zhàn)中才能獲得能力的提升,本篇文章手把手帶你用java+Springboot+vue+maven+elementui+mysql實現(xiàn)一個校園跑腿管理系統(tǒng),大家可以在過程中查缺補漏,提升水平
    2022-01-01
  • Spring MVC簡介_動力節(jié)點Java學(xué)院整理

    Spring MVC簡介_動力節(jié)點Java學(xué)院整理

    Spring MVC屬于SpringFrameWork的后續(xù)產(chǎn)品,已經(jīng)融合在Spring Web Flow里面。今天先從寫一個Spring MVC的HelloWorld開始,讓我們看看如何搭建起一個Spring mvc的環(huán)境并運行程序,感興趣的朋友一起學(xué)習(xí)吧
    2017-08-08
  • Java Scanner類用法及nextLine()產(chǎn)生的換行符問題實例分析

    Java Scanner類用法及nextLine()產(chǎn)生的換行符問題實例分析

    這篇文章主要介紹了Java Scanner類用法及nextLine()產(chǎn)生的換行符問題,結(jié)合實例形式分析了Scanner類功能、hasNextInt()和nextInt()方法使用及nextLine()產(chǎn)生的換行符問題解決方法,需要的朋友可以參考下
    2019-03-03
  • Java8?Stream之groupingBy分組使用解讀

    Java8?Stream之groupingBy分組使用解讀

    這篇文章主要介紹了Java8?Stream之groupingBy分組使用,具有很好的參考價值,希望對大家有所幫助。如有錯誤或未考慮完全的地方,望不吝賜教
    2023-04-04
  • 解決@PathVariable對于特殊字符截斷的問題

    解決@PathVariable對于特殊字符截斷的問題

    這篇文章主要介紹了解決@PathVariable對于特殊字符截斷的問題,具有很好的參考價值,希望對大家有所幫助。一起跟隨小編過來看看吧
    2021-02-02
  • java 實現(xiàn)比較版本號功能

    java 實現(xiàn)比較版本號功能

    本篇文章主要介紹了java 中涉及到客戶端的系統(tǒng)經(jīng)常需要用到比較版本號的功能,并附小示例,希望能幫助需要的小伙伴
    2016-07-07
  • Java高級特性(基礎(chǔ))

    Java高級特性(基礎(chǔ))

    這篇文章主要介紹了Java高級特性(基礎(chǔ)),需要的朋友可以參考下
    2017-04-04
  • java對象類型轉(zhuǎn)換和多態(tài)性(實例講解)

    java對象類型轉(zhuǎn)換和多態(tài)性(實例講解)

    下面小編就為大家?guī)硪黄猨ava對象類型轉(zhuǎn)換和多態(tài)性(實例講解)。小編覺得挺不錯的,現(xiàn)在就分享給大家,也給大家做個參考。一起跟隨小編過來看看吧
    2017-10-10
  • java &與&&的區(qū)別及實例

    java &與&&的區(qū)別及實例

    這篇文章主要介紹了java &與&&的區(qū)別的相關(guān)資料,并附簡單實例,幫助大家學(xué)習(xí)理解這部分知識,需要的朋友可以參考下
    2016-10-10

最新評論

汝阳县| 武平县| 周至县| 揭东县| 五寨县| 呼玛县| 兰溪市| 嘉善县| 巴塘县| 临西县| 隆德县| 阿尔山市| 闽侯县| 金华市| 故城县| 保定市| 永平县| 茶陵县| 伊春市| 尼勒克县| 磴口县| 郁南县| 阜新市| 夹江县| 高淳县| 云龙县| 东海县| 华宁县| 青浦区| 荣昌县| 崇文区| 高陵县| 吕梁市| 南雄市| 霍城县| 遵义县| 嵊泗县| 钟山县| 略阳县| 孟连| 安顺市|