成人免费xxxxx在线视频软件_久久精品久久久_亚洲国产精品久久久_天天色天天色_亚洲人成一区_欧美一级欧美三级在线观看

你還在使用 WebSocket 實(shí)現(xiàn)實(shí)時(shí)消息推送嗎?

開發(fā) 前端
雖然 WebSocket 已經(jīng)是個(gè)“老將”了,但它在實(shí)時(shí)通信領(lǐng)域的地位依然不可撼動(dòng)。通過上面的示例,我們可以看到使用 Java 和 Spring Boot 實(shí)現(xiàn) WebSocket 消息推送是多么簡單和高效。
說起實(shí)時(shí)消息推送,大家是不是首先就想到了 WebSocket?確實(shí),WebSocket 在實(shí)現(xiàn)實(shí)時(shí)通信方面確實(shí)是個(gè)不錯(cuò)的選擇,它能在單個(gè)連接上進(jìn)行全雙工通訊,讓客戶端和服務(wù)器之間的數(shù)據(jù)交換變得簡單又高效。但是,你知道嗎?隨著技術(shù)的發(fā)展,有些新的工具和框架也在悄然崛起,給 WebSocket 帶來了不小的挑戰(zhàn)!

不過,咱們今天不聊那些新興的玩意兒,還是回歸初心,好好聊聊 WebSocket,畢竟它可是實(shí)時(shí)通信領(lǐng)域的“老將”了。我們就用 Java 來實(shí)現(xiàn)一個(gè)簡單的 WebSocket 消息推送示例,讓大家看看 WebSocket 的魅力所在。

WebSocket 是什么?

WebSocket 是一種網(wǎng)絡(luò)通信協(xié)議,它提供了一種在單個(gè) TCP 連接上進(jìn)行全雙工通訊的渠道。簡單來說,就是客戶端和服務(wù)器之間只需要建立一個(gè)連接,就可以通過這個(gè)連接雙向傳輸數(shù)據(jù),而且數(shù)據(jù)可以隨時(shí)發(fā)送,不需要像 HTTP 那樣每次請(qǐng)求都要建立連接,大大提高了通信效率。

為什么選擇 WebSocket?

  1. 實(shí)時(shí)性:WebSocket 最大的特點(diǎn)就是實(shí)時(shí)性,數(shù)據(jù)可以隨時(shí)從服務(wù)器發(fā)送到客戶端,非常適合需要實(shí)時(shí)通信的應(yīng)用場景,比如在線聊天、實(shí)時(shí)通知等。
  2. 減少資源消耗:由于 WebSocket 只需要建立一次連接,就可以一直保持通信狀態(tài),所以相比 HTTP 的多次請(qǐng)求/響應(yīng)模式,WebSocket 大大減少了資源的消耗。
  3. 更好的二進(jìn)制支持:WebSocket 提供了對(duì)二進(jìn)制數(shù)據(jù)的支持,這使得它在處理一些復(fù)雜的數(shù)據(jù)類型時(shí)更加高效。

Java 實(shí)現(xiàn) WebSocket 消息推送

要用 Java 實(shí)現(xiàn) WebSocket 消息推送,我們可以使用 Spring Boot 框架,它提供了對(duì) WebSocket 的良好支持。下面是一個(gè)簡單的示例:

添加依賴

首先,在你的 Spring Boot 項(xiàng)目的 pom.xml 文件中添加 WebSocket 的依賴:

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

配置 WebSocket

然后,創(chuàng)建一個(gè)配置類來啟用和配置 WebSocket:

import org.springframework.context.annotation.Configuration;
   import org.springframework.messaging.simp.config.MessageBrokerRegistry;
   import org.springframework.web.socket.config.annotation.EnableWebSocketMessageBroker;
   import org.springframework.web.socket.config.annotation.StompEndpointRegistry;
   import org.springframework.web.socket.config.annotation.WebSocketMessageBrokerConfigurer;


   @Configuration
   @EnableWebSocketMessageBroker
   public class WebSocketConfig implements WebSocketMessageBrokerConfigurer {


       @Override
       public void registerStompEndpoints(StompEndpointRegistry registry) {
           registry.addEndpoint("/ws").withSockJS();
       }


       @Override
       public void configureMessageBroker(MessageBrokerRegistry registry) {
           registry.enableSimpleBroker("/topic");
           registry.setApplicationDestinationPrefixes("/app");
       }
   }

這里我們注冊(cè)了一個(gè) /ws 的 WebSocket 端點(diǎn),并啟用了 SockJS 作為備選方案,以支持那些不支持 WebSocket 的瀏覽器。同時(shí),我們還配置了消息代理,用于將消息從服務(wù)器推送到客戶端。

創(chuàng)建消息處理器

接下來,創(chuàng)建一個(gè)消息處理器來處理 WebSocket 消息:

import org.springframework.messaging.handler.annotation.MessageMapping;
   import org.springframework.messaging.handler.annotation.SendTo;
   import org.springframework.stereotype.Controller;


   @Controller
   public class WebSocketController {


       @MessageMapping("/hello")
       @SendTo("/topic/greetings")
       public String greeting(String message) throws Exception {
           return "Hello, " + message + "!";
       }
   }

在這個(gè)處理器中,我們定義了一個(gè) /hello 的消息映射,當(dāng)接收到這個(gè)消息時(shí),處理器會(huì)將其處理并發(fā)送到 /topic/greetings 主題下。

客戶端連接 WebSocket

最后,我們需要在客戶端連接到 WebSocket 服務(wù)器,并訂閱相應(yīng)的主題來接收消息。這里以瀏覽器為例,使用 SockJS 和 Stomp.js 庫:

<!DOCTYPE html>
   <html>
   <head>
       <title>WebSocket Test</title>
       <script src="https://cdn.jsdelivr.net/npm/sockjs-client/dist/sockjs.min.js"></script>
       <script src="https://cdn.jsdelivr.net/npm/stompjs/lib/stomp.min.js"></script>
   </head>
   <body>
       <div id="greetings"></div>
       <script type="text/javascript">
           var socket = new SockJS('/ws');
           var stompClient = Stomp.over(socket);


           stompClient.connect({}, function (frame) {
               stompClient.subscribe('/topic/greetings', function (greeting) {
                   var message = JSON.parse(greeting.body).content;
                   document.getElementById("greetings").innerHTML += "<p>" + message + "</p>";
               });
               stompClient.send("/app/hello", {}, "World");
           });
       </script>
   </body>
   </html>

在這個(gè) HTML 頁面中,我們首先通過 SockJS 連接到 /ws 端點(diǎn),然后通過 Stomp.js 發(fā)送和接收消息。當(dāng)頁面加載時(shí),它會(huì)向服務(wù)器發(fā)送一個(gè) /hello 消息,并訂閱 /topic/greetings 主題來接收服務(wù)器的回復(fù)。

測試 WebSocket 消息推送

現(xiàn)在,一切都已經(jīng)準(zhǔn)備好了,我們可以啟動(dòng) Spring Boot 應(yīng)用,并打開瀏覽器訪問上面創(chuàng)建的 HTML 頁面。當(dāng)你打開頁面時(shí),你應(yīng)該能看到頁面上顯示 “Hello, World!” 的消息,這就是從服務(wù)器通過 WebSocket 實(shí)時(shí)推送到客戶端的消息。

結(jié)語

雖然 WebSocket 已經(jīng)是個(gè)“老將”了,但它在實(shí)時(shí)通信領(lǐng)域的地位依然不可撼動(dòng)。通過上面的示例,我們可以看到使用 Java 和 Spring Boot 實(shí)現(xiàn) WebSocket 消息推送是多么簡單和高效。當(dāng)然,隨著技術(shù)的發(fā)展,我們也需要關(guān)注那些新興的實(shí)時(shí)通信技術(shù)和工具,但 WebSocket 作為一個(gè)成熟、穩(wěn)定的解決方案,依然值得我們深入學(xué)習(xí)和使用。

責(zé)任編輯:武曉燕 來源: 石杉的架構(gòu)筆記
相關(guān)推薦

2023-11-17 09:35:58

2013-04-12 10:05:49

HTML5WebSocket

2023-11-26 09:10:34

WebSocketgreeting?在線用戶

2021-02-05 07:28:11

SpringbootNettyWebsocke

2017-09-05 15:30:00

JavascriptSocket.ioNode.js

2024-08-02 09:00:17

NettyWebSocketNIO

2021-03-25 08:29:33

SpringBootWebSocket即時(shí)消息

2023-08-14 08:01:12

websocket8g用戶

2021-03-26 08:16:32

SpringbootWebsocket前端

2024-06-12 08:46:19

2023-09-19 15:33:50

Web實(shí)時(shí)消息推送

2024-04-07 09:41:18

SignalR實(shí)時(shí)通信開發(fā)

2022-06-28 08:37:07

分布式服務(wù)器WebSocket

2024-08-26 15:17:16

2012-12-25 09:36:11

Storm大數(shù)據(jù)分析

2023-07-26 07:28:55

WebSocket服務(wù)器方案

2014-01-09 14:52:47

創(chuàng)意開源

2024-10-11 11:32:22

Spring6RSocket服務(wù)

2022-07-30 10:08:06

MQTT?協(xié)議物聯(lián)網(wǎng)

2012-07-19 10:03:32

點(diǎn)贊
收藏

51CTO技術(shù)棧公眾號(hào)

主站蜘蛛池模板: 黑人巨大精品欧美一区二区免费 | 久久99视频 | 91精品久久久久久久久99蜜臂 | 欧美6一10sex性hd | 懂色tv | av一二三四| 91麻豆精品国产91久久久久久 | 97国产精品| 亚洲成人在线免费 | 偷拍自拍网站 | 一级a爱片久久毛片 | 巨大荫蒂视频欧美另类大 | 国产伦精品一区二区三区高清 | 久久久人成影片免费观看 | 欧美激情欧美激情在线五月 | 亚洲另类春色偷拍在线观看 | 久久精品亚洲一区二区三区浴池 | 一级毛片在线播放 | 男人久久天堂 | 成人在线免费视频 | 天天操天天怕 | 精品av天堂毛片久久久借种 | av片免费| 国产高清久久久 | 午夜影院 | 91视频一区 | 国产精品久久久久久久久久久免费看 | 国产乱xxav | 亚洲精品久久久久久久久久久 | 日韩中文电影 | 精品亚洲一区二区三区四区五区 | 欧美a免费 | 亚洲高清成人 | 欧美视频在线播放 | 日本在线视频中文字幕 | 亚洲福利| 久久婷婷国产麻豆91 | 亚洲免费在线播放 | 久久一区二区视频 | 亚洲一区二区在线播放 | 精品伊人久久 |