精品欧美一区二区三区在线观看 _久久久久国色av免费观看性色_国产精品久久在线观看_亚洲第一综合网站_91精品又粗又猛又爽_小泽玛利亚一区二区免费_91亚洲精品国偷拍自产在线观看 _久久精品视频在线播放_美女精品久久久_欧美日韩国产成人在线

基于Spring Boot,一步步教你用Websockets和STOMP進行消息推送

開發 前端
在本文中,我們學習了如何使用Spring Boot應用程序、WebSockets和STOMP協議發送推送通知。如果希望使用外部的ActiveMQ實例,只需將其連接到應用程序,因為ActiveMQ也支持STOMP協議。

1 引言

推送通知是一種實時消息傳遞形式,通過它網站可以向用戶實時通知特定事件。通常使用WebSockets實現推送通知,這種技術提供了客戶端和服務器之間的雙向通信,從而實現了實時消息的處理。

本文使用WebSockets來實現推送通知,并使用STOMP協議在客戶端和服務器之間進行通信。

2 什么是STOMP

STOMP代表簡單文本導向的消息協議(Simple Text Oriented Messaging Protocol)。由于WebSockets是一種低級協議,使用幀(frames)來傳輸數據,而STOMP是一種高級協議,定義了如何解釋某些幀類型中的數據。這些幀類型包括CONNECT、SEND、ACK等。因此,使用STOMP能夠更加簡化使用WebSockets進行數據的發送、接收和解析過程。

有了這個基礎,接下來創建服務器應用程序。

3 創建一個應用程序

到https://start.spring.io創建一個Spring Boot應用程序,并添加以下依賴項:

Spring Boot Starter Websockets

現在,使用一個嵌入式消息代理,它將是一個提供WebSocket功能的內存中代理。給代理添加一些目的地。這些目的地指的是將要發送消息的路徑。

@Configuration
@EnableWebSocketMessageBroker
public class WebSocketConfig implements WebSocketMessageBrokerConfigurer {

    @Override
    public void configureMessageBroker(MessageBrokerRegistry config) {
        config.enableSimpleBroker("/all","/specific");
        config.setApplicationDestinationPrefixes("/app");
    }

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

在第一部分中,啟用了一個帶有兩個目的地(/all和/specific)的代理。/all目的地將用于向所有用戶發送通知,/specific目的地用于向特定用戶發送通知。

接下來,設置應用程序的目的地,即 /app,這樣就可以向應用程序發送信息了。

在第二部分中,注冊了STOMP端點。其中一個啟用了SockJS,另一個僅使用WebSocket。之所以這樣做,是因為并非所有瀏覽器都支持WebSocket,當不可用時,可以回退到使用SockJS。

4 向所有用戶發送推送通知

先看一下第一個用例,即向所有用戶發送推送通知。

為此,首先實現一個控制器,該控制器會把來自一個客戶端的信息轉發給所有客戶端。

@org.springframework.stereotype.Controller
public class Controller {

    @Autowired
    SimpMessagingTemplate simpMessagingTemplate;

    @MessageMapping("/application")
    @SendTo("/all/messages")
    public Message send(final Message message) throws Exception {
        return message;
    }
}

在上面的代碼中,我們接受/application端點上的消息。這實際上是之前定義的應用程序目的地/app的子目的地。這意味著客戶端必須把消息發送到/app/application目的地才能到達該處理程序。

接下來,把傳入的消息轉發到/all/messages。現在,訂閱該目的地的所有客戶端都將收到發送給所有客戶端的消息。

來看看HTML頁面上的客戶端代碼:

<script type="text/javascript">
        var stompClient = null;

        var socket = new SockJS('/ws');
        stompClient = Stomp.over(socket);
        stompClient.connect({}, function(frame) {
            console.log(frame);
            stompClient.subscribe('/all/messages', function(result) {
                show(JSON.parse(result.body));
            });
        });

在這里,使用一個STOMP客戶端,在WebSocket上建立連接,然后訂閱/all/messages上的消息。

現在,為了將消息發送給應用程序,有以下的JavaScript函數,它將消息發送到/app/application:

function sendMessage() {
    var text = document.getElementById('text').value;
    stompClient.send("/app/application", {},
      JSON.stringify({'from':from, 'text':text}));
}

它簡單地從文本字段中獲取文本值,并將其發送到代理的應用程序目標。

這是通過下面顯示的一個簡單表單進行連接的。

圖片圖片

為了測試這個,我們向所有連接的客戶端發送一個推送通知"Notification to all"。

圖片圖片

這里有兩個連接的客戶端,兩個客戶端都立即收到了通知。

現在,在這里只是顯示了從WebSocket接收到的內容,但可以根據需要使用CSS和JavaScript來自定義通知彈出窗口或通知標簽。

這就是如何向所有用戶發送通知。那么如何向特定用戶發送通知呢?

5 向特定用戶發送推送通知

要向特定用戶發送通知,我們需要收件人的用戶ID。這意味著接收方用戶需要登錄并提供一個有效的會話來標識用戶的用戶ID。

為此,我們將集成Spring Security。因此,添加以下依賴項。

Spring Boot Starter Security

添加了Spring Security依賴項后,我們需要定義一個安全配置來允許使用WebSockets進行連接。

@Bean
public SecurityFilterChain filterChain(HttpSecurity http) throws Exception {
    http
            .authorizeHttpRequests()
                .mvcMatchers("/","/ws/**")
                .permitAll()
            .and()
            .authorizeHttpRequests()
                .anyRequest().authenticated()
            .and()
            .formLogin()
            .and()
            .logout( logout -> logout.logoutSuccessUrl("/"));
    return http.build();
}

@Bean
public InMemoryUserDetailsManager userDetailsService() {
    UserDetails user = User.withDefaultPasswordEncoder()
            .username("test")
            .password("test")
            .roles("USER")
            .build();

    return new InMemoryUserDetailsManager(user);
}

在這里,我們允許所有連接到/ws路徑的連接,以便在沒有任何身份驗證的情況下進行WebSocket通信,還定義了一個名為"test"的靜態用戶。

還記得在上面的消息代理設置中創建的/specific目標嗎?現在將使用它來發送特定的消息。

首先,在控制器中添加一個處理程序,用于接收消息并將其發送給特定的用戶,這些用戶將使用它們的用戶名進行標識。

@org.springframework.stereotype.Controller
public class Controller {

    @Autowired
    SimpMessagingTemplate simpMessagingTemplate;

    @MessageMapping("/application")
    @SendTo("/all/messages")
    public Message send(final Message message) throws Exception {
        return message;
    }

    @MessageMapping("/private")
    public void sendToSpecificUser(@Payload Message message) {
        simpMessagingTemplate.convertAndSendToUser(message.getTo(), "/specific", message);
    }
}

現在,在sendToSpecificUser方法中,我們接受使用/app/private發送的消息。消息包含要發送給接收者的文本以及接收者的用戶ID。

消息模板所做的是將消息發送到以/user開頭的目標,然后將其附加到我們在convertAndSendToUser函數調用中指定的目標,即/specific,然后附加所指定的用戶的用戶會話ID。

因此,convertAndSendToUser將消息發送到目標/user/specific-<user-session-id>。這個目標是在用戶登錄并訂閱/user/specific時創建的。

當用戶登錄并訂閱/user/specific時,它會發送有效的已登錄會話ID。然后,Spring自動處理訂閱/user/specific將自動訂閱已登錄用戶的特定目標,即/user/specific-<user-session-id>。

這也意味著只有用戶登錄時才能發送通知。

現在,添加一個新的文本塊并訂閱用戶特定的目標。

socket = new SockJS('/ws');
privateStompClient = Stomp.over(socket);
privateStompClient.connect({}, function(frame) {
        console.log(frame);
        privateStompClient.subscribe('/user/specific', function(result) {
        console.log(result.body)
            show(JSON.parse(result.body));
        });
    });

圖片圖片

打開兩個客戶端,并使用"test"用戶登錄第二個客戶端。可以使用/login端點觸發登錄。

在上面的圖像中,正在以"test"用戶登錄第二個客戶端。

登錄后,首先向所有客戶端發送消息。

圖片圖片

所以,即使已登錄的用戶也會收到發送給所有客戶端的通知。

現在,向"test"用戶發送一個私有通知。

圖片圖片

在上面的圖像中,我們為特定用戶提供了一條消息,并指定了特定用戶的用戶ID,即"test",通知只會傳遞給已登錄的用戶。

這是一個關于它是如何工作的簡短演示。

圖片圖片

6 結語

在本文中,我們學習了如何使用Spring Boot應用程序、WebSockets和STOMP協議發送推送通知。如果希望使用外部的ActiveMQ實例,只需將其連接到應用程序,因為ActiveMQ也支持STOMP協議。這樣,我們就可以通過應用程序將消息中繼到外部的ActiveMQ實例,實現更靈活和可定制的消息傳遞。通過這種方式,可以輕松地實現推送通知功能,為用戶提供實時的信息更新和交互體驗。希望這篇文章對讀者有所幫助!

責任編輯:武曉燕 來源: Java學研大本營
相關推薦

2011-09-05 12:36:08

路由器限速linux路由器

2017-12-25 11:50:57

LinuxArch Linux

2025-09-04 01:44:00

2017-01-19 21:08:33

iOS路由構建

2018-06-11 15:30:12

2018-12-24 10:04:06

Docker存儲驅動

2019-03-05 14:09:27

Docker存儲容器

2019-07-09 15:23:22

Docker存儲驅動

2010-08-12 10:02:16

路由器NAT

2009-08-14 11:35:01

Scala Actor

2010-08-10 11:31:36

路由器配置NAT

2009-04-15 09:29:07

2025-09-30 09:40:33

2016-11-02 18:54:01

javascript

2025-02-25 09:41:27

2010-03-04 16:28:17

Android核心代碼

2010-04-07 13:05:57

2024-11-18 17:12:18

C#編程.NET

2024-09-30 09:56:59

2024-08-30 08:30:29

CPU操作系統寄存器
點贊
收藏

51CTO技術棧公眾號

日日夜夜精品免费| 欧美另类69xxxx| 草莓视频丝瓜在线观看丝瓜18| 高清shemale亚洲人妖| 午夜免费日韩视频| 精品人妻互换一区二区三区| 狠狠久久伊人中文字幕| 亚洲欧美欧美一区二区三区| 国产欧美一区二区三区不卡高清| 依依成人综合网| 99久久婷婷| 亚洲国产精品一区二区三区| 五月天婷婷激情视频| 中国av在线播放| www欧美成人18+| 成人在线播放av| www欧美在线| 午夜精品久久久久久久四虎美女版| 欧美sm美女调教| 色婷婷综合久久久久中文字幕| 超碰在线观看免费版| 91丨porny丨蝌蚪视频| 成人在线小视频| 成人在线免费看视频| 中文字幕午夜精品一区二区三区 | 日韩美女爱爱视频| 成人欧美一区| 97久久精品人人爽人人爽蜜臀| 91精品久久久久久久久不口人| 国产成人亚洲欧洲在线| 91精品亚洲| 中文一区二区视频| 给我看免费高清在线观看| 日本免费一区二区视频| 欧美三级乱人伦电影| 毛片在线视频播放| 欧美6一10sex性hd| 亚洲欧美在线视频| 五月天久久狠狠| 黄色网址在线播放| 99精品桃花视频在线观看| 3d动漫啪啪精品一区二区免费| 国产成人a v| 亚洲视频www| 欧美激情高清视频| 老女人性淫交视频| 中文字幕亚洲综合久久五月天色无吗'' | av亚洲精华国产精华| 99久久精品免费看国产一区二区三区| 中文天堂在线视频| 日韩综合在线视频| 国产精品福利在线观看| av网站中文字幕| 亚洲精选国产| 91极品女神在线| 国产成年人免费视频| 综合一区二区三区| 欧美刺激性大交免费视频| 免费黄色激情视频| 99视频精品全部免费在线视频| 自拍偷拍亚洲在线| eeuss中文字幕| 日韩欧美视频| 日韩中文字幕视频在线观看| 中日韩一级黄色片| 中文字幕免费一区二区| 欧美人在线视频| 久草视频手机在线观看| 亚洲第一网站| 欧美一级视频一区二区| 一级做a爰片久久毛片| 久久久精品五月天| 国产精品丝袜一区二区三区| 中文字幕乱码视频| 国内精品久久久久影院色| 亚洲伊人久久大香线蕉av| 性中国古装videossex| 成人午夜精品在线| 欧美成人dvd在线视频| 男人久久精品| 国产精品不卡视频| 黄色三级中文字幕| 成人性生活av| 欧美三级日本三级少妇99| 亚洲第一天堂久久| 久9re热视频这里只有精品| 日韩精品中文字幕有码专区| 亚洲综合欧美综合| 欧美黄色一级视频| 51久久精品夜色国产麻豆| 国产精品成人久久久| 韩国毛片一区二区三区| 99视频免费观看| 久香视频在线观看| 亚洲欧美日韩系列| 免费高清在线观看免费| 亚洲精品成人一区| 亚洲精品国产精品国自产在线| youjizz亚洲女人| 亚洲欧美伊人| 国产精品欧美久久久| 亚洲精品久久久狠狠狠爱| 久久人人爽爽爽人久久久| 潘金莲一级淫片aaaaaa播放1| 1234区中文字幕在线观看| 欧美日韩亚洲不卡| 水蜜桃av无码| 亚洲欧美偷拍自拍| 国产精欧美一区二区三区| www.桃色av嫩草.com| 国产日韩欧美a| 国产精品igao激情视频| 成人在线高清| 日韩h在线观看| 免费在线观看a级片| 男人的天堂成人在线| 91免费在线观看网站| 91ph在线| 色呦呦网站一区| 精品国产免费久久久久久婷婷| 欧美艳星介绍134位艳星| 久久免费少妇高潮久久精品99| 中文字幕一区二区三区波野结| 成人丝袜18视频在线观看| 人人妻人人澡人人爽精品欧美一区| 香蕉伊大人中文在线观看| 日韩一级免费观看| 国产91在线播放九色| 久久婷婷丁香| 国产综合欧美在线看| 色呦呦在线看| 91精品久久久久久久久99蜜臂 | 国产精品网站在线| 日韩视频第二页| 九色丨蝌蚪丨成人| 久久久久久久久久久久久久久久久久av | 国产成一区二区| 无码国产色欲xxxx视频| 国产精品激情偷乱一区二区∴| 白嫩少妇丰满一区二区| 成人在线视频你懂的| 欧美日韩成人在线播放| 国产乱码精品一区二三区蜜臂 | 久草精品在线观看| 日本免费高清不卡| 欧美羞羞视频| 亚洲另类xxxx| 国产又大又粗又爽| 久久麻豆一区二区| 无码人妻丰满熟妇区毛片18| 日韩人体视频| 日本成人激情视频| 国产免费av高清在线| 色哟哟一区二区在线观看| 国产全是老熟女太爽了| 欧美一级播放| 麻豆久久久av免费| 欧美7777| 自拍偷拍亚洲在线| 国产又色又爽又黄又免费| 综合久久久久久| 少妇性l交大片7724com| 狠狠爱www人成狠狠爱综合网| 国产精品v欧美精品v日韩| а√天堂8资源中文在线| 亚洲国产精品系列| 亚洲欧美另类在线视频| 国产欧美精品区一区二区三区 | 欧美成人三级视频| 粉嫩欧美一区二区三区高清影视| www.成年人视频| 老司机精品在线| 国产成人精品日本亚洲| 波多野结衣在线影院| 91麻豆精品国产自产在线 | 国产精品福利观看| 男人天堂久久久| 日韩久久久久久| 五月天综合激情| 欧美激情一区二区三区蜜桃视频| 五月天视频在线观看| 国产一区日韩欧美| 久久久亚洲综合网站| 国产成人精选| 久久99热精品| 少妇性bbb搡bbb爽爽爽欧美| 欧美自拍偷拍午夜视频| 国产精品国产精品88| 成人手机电影网| 九九热在线免费| 一个色综合网| 精品中文字幕一区| 日韩欧乱色一区二区三区在线 | 亚洲精品在线三区| 中文字幕永久在线| 一区二区三区免费看视频| 无码人妻aⅴ一区二区三区| 人人狠狠综合久久亚洲| 国产在线xxxx| 日本大胆欧美| 久久99精品久久久久久久青青日本 | 狠狠操综合网| 成人欧美一区二区三区黑人免费| 中文日产幕无线码一区二区| 久久精品美女视频网站| 亚洲色图 校园春色| 91精品婷婷国产综合久久性色 | 亚洲欧美清纯在线制服| dy888午夜| 国产一区二区三区四区| 国产精品视频免费观看| 久久精品xxxxx| 欧美中在线观看| 九色91在线| 按摩亚洲人久久| 深夜福利视频在线观看| 日韩视频免费观看高清完整版在线观看 | 国产精品成人播放| 18aaaa精品欧美大片h| 久久亚洲精品视频| 懂色av中文在线| 亚洲精品色婷婷福利天堂| 草逼视频免费看| 欧美日韩国产在线播放网站| 欧美亚洲精品天堂| 亚洲成人av一区二区| 日本福利片在线观看| 中文欧美字幕免费| 蜜乳av中文字幕| 91蜜桃网址入口| 奇米777第四色| 高清免费成人av| 国产一级片中文字幕| 久久国产视频网| 国产又大又黄又粗又爽| 性娇小13――14欧美| 日本五级黄色片| 中文字幕人成人乱码| 亚洲精品偷拍视频| 欧美激情另类| 一区二区三区四区在线视频 | 成人深夜福利app| 潘金莲一级淫片aaaaa| 国产做a爰片久久毛片| 男人添女人下面免费视频| 三级精品在线观看| 国产免费视频传媒| 三级成人在线视频| 91热这里只有精品| 免费成人性网站| 亚洲欧美自拍另类日韩| 美女www一区二区| 黄大色黄女片18第一次| 青草国产精品久久久久久| 无限资源日本好片| 久久国产生活片100| 999久久久精品视频| 国产一区二区三区在线看麻豆| 日本中文字幕影院| 国产盗摄一区二区三区| 国产乱淫av麻豆国产免费| 粉嫩一区二区三区在线看| 欧美日韩人妻精品一区在线| 成人激情黄色小说| 蜜臀av一区二区三区有限公司| 久久久美女毛片| 国产午夜精品久久久久久久久| 国产精品欧美一级免费| 免费看一级大片| 亚洲高清视频中文字幕| 免费观看成人毛片| 欧美视频一区二区| 国产福利视频导航| 亚洲国产精品资源| 国产精品二线| 久久资源免费视频| 136福利第一导航国产在线| 日韩免费av片在线观看| 欧美少妇激情| av资源一区二区| 一道在线中文一区二区三区| 亚洲成人自拍视频| 在线中文字幕第一区| 国产黄视频在线| 蜜桃视频一区二区三区在线观看| 在线a免费观看| 99久久精品免费| 999福利视频| 亚洲国产欧美日韩另类综合 | 一区二区三区国产在线| 国产精品视频分类| 成人精品小蝌蚪| 在线视频第一页| 亚洲专区一二三| 久久久精品毛片| 精品噜噜噜噜久久久久久久久试看| 欧美日韩国产综合视频| 久久国产精品偷| 日韩成人影音| 国产精华一区| 久久电影院7| 欧美日韩亚洲一| 韩日欧美一区二区三区| 中文字幕在线观看的网站| ...xxx性欧美| 99久久久无码国产精品免费蜜柚 | 亚洲日本国产精品| 久久av红桃一区二区小说| 欧美momandson| 国产aⅴ精品一区二区三区黄| 欧美综合另类| 国产资源在线视频| 国产精品一区三区| 亚洲图片第一页| 精品久久在线播放| 亚洲精品一区二区口爆| 久久好看免费视频| av成人亚洲| 欧美亚洲丝袜| 亚洲免费黄色| 亚洲午夜久久久久久久久| 综合久久综合久久| 在线观看毛片网站| 亚洲新声在线观看| 日韩精品美女| 国产精品一 二 三| 中出一区二区| 亚洲在线观看网站| 国产精品久久久久aaaa| 国产字幕在线观看| 亚洲日本aⅴ片在线观看香蕉| 97在线视频免费观看完整版| 99在线观看视频| 亚洲九九在线| 国产91在线免费观看| 亚洲三级免费电影| 国产免费不卡av| 久久精品国亚洲| 国产一区一区| 欧洲xxxxx| 黑人巨大精品欧美一区| 日韩欧美国产成人精品免费| 欧美日韩激情一区二区| 麻豆网站在线看| 成人激情视频小说免费下载| 欧美电影三区| 樱花草www在线| 一区二区三区中文字幕电影| 国产视频手机在线观看| 久青草国产97香蕉在线视频| 麻豆国产一区| 人人妻人人澡人人爽欧美一区 | 欧美性猛交一区二区三区精品| 黄色大片在线免费观看| 国产a级全部精品| 精品国产成人| 欧美午夜aaaaaa免费视频| 国产精品久久久久四虎| 国产一区二区三区视频免费观看| 日韩在线中文字| 国产亚洲字幕| youjizz.com在线观看| 不卡视频在线看| 中文字幕手机在线视频| 中文字幕亚洲一区| 国产一区二区三区免费观看在线 | 久久电影网站| 久久久久久艹| 日韩高清不卡一区二区三区| 亚洲综合第一区| 日韩一级精品视频在线观看| 高潮在线视频| 日韩高清dvd| 国产精品一区久久久久| 久久午夜免费视频| 在线视频欧美日韩精品| 日韩中文字幕一区二区高清99| 日韩视频免费播放| 国产丝袜欧美中文另类| 国产特级aaaaaa大片| 国内自拍欧美激情| 官网99热精品| 蜜桃视频一区二区三区在线观看| 青青草原在线免费观看视频| 亚洲精品美女网站| 精品国产黄a∨片高清在线| 日韩极品视频在线观看| 久久久噜噜噜久久中文字幕色伊伊| 国产精品久久免费| 97色在线视频| 欧美残忍xxxx极端| 人体私拍套图hdxxxx| 欧美日韩精品综合在线| 俺来俺也去www色在线观看| 亚洲电影网站| 亚洲人体大胆视频| 欧美激情videos| 国内自拍视频在线播放| 国产精品美女久久久久aⅴ| 国产黄色片网站|