1. 程式人生 > 其它 >websocket springboot整合webSocket的使用

websocket springboot整合webSocket的使用

https://www.cnblogs.com/domi22/p/9460299.html

 

 

springboot整合webSocket的使用

 

引入jar包

<dependency><!-- 5.引入websocket-->
            <groupId>org.springframework.boot</groupId>
            <artifactId>spring-boot-starter-websocket</artifactId>
        </dependency>

 

1 配置config

1 2 3 4 5 6 7 8 9 10 11 12 13 package com.test.domi.config;   import org.springframework.context.annotation.Configuration; import org.springframework.messaging.simp.config.MessageBrokerRegistry; import org.springframework.web.socket.config.annotation.AbstractWebSocketMessageBrokerConfigurer;
import org.springframework.web.socket.config.annotation.EnableWebSocketMessageBroker; import org.springframework.web.socket.config.annotation.StompEndpointRegistry;   @Configuration // @EnableWebSocketMessageBroker註解用於開啟使用STOMP協議來傳輸基於代理(MessageBroker)的訊息,這時候控制器(controller) // 開始支援@MessageMapping,就像是使用@requestMapping一樣。
@EnableWebSocketMessageBroker public class WebSocketConfig extends AbstractWebSocketMessageBrokerConfigurer {

/*將"/hello"路徑註冊為STOMP端點,這個路徑與傳送和接收訊息的目的路徑有所不同,這是一個端點,客戶端在訂閱或釋出訊息到目的地址前,要連線該端點,
* 即使用者傳送請求url="/applicationName/hello"與STOMP server進行連線。之後再轉發到訂閱url;
* PS:端點的作用——客戶端在訂閱或釋出訊息到目的地址前,要連線該端點。

1 2 3 4 5 @Override public void registerStompEndpoints(StompEndpointRegistry stompEndpointRegistry) {     //註冊一個Stomp的節點(endpoint),並指定使用SockJS協議。記得設定跨域     stompEndpointRegistry.addEndpoint("/endpointAric").setAllowedOrigins("*").withSockJS(); }

/**
* 配置了一個簡單的訊息代理,如果不過載,預設情況下回自動配置一個簡單的記憶體訊息代理,用來處理以"/topic"為字首的訊息。這裡過載configureMessageBroker()方法,
* 訊息代理將會處理字首為"/topic"和"/queue"的訊息。

1 2 3 4 5 6 7 8 9 10 11 12     @Override     public void configureMessageBroker(MessageBrokerRegistry registry) {         //服務端傳送訊息給客戶端的域,多個用逗號隔開         registry.enableSimpleBroker("/topic");         //定義一對一推送的時候字首         //registry.setUserDestinationPrefix("/user");         //定義websoket字首         //registry.setApplicationDestinationPrefixes("/ws-push");     }        }

  

 

2 controller

1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 package com.test.domi.controller;   import com.google.common.collect.Lists; import com.test.domi.service.impl.WebSocketService; import org.springframework.messaging.handler.annotation.MessageMapping; import org.springframework.messaging.handler.annotation.SendTo; import org.springframework.messaging.simp.SimpMessagingTemplate; import org.springframework.stereotype.Controller; import javax.annotation.Resource; import java.util.List;   @Controller public class WsController {       @Resource     private SimpMessagingTemplate template;       @MessageMapping("/welcome")//@MessageMapping和@RequestMapping功能類似,用於設定URL對映地址,瀏覽器向伺服器發起請求,需要通過該地址。     public void say(String message) throws Exception {         template.convertAndSend("/topic/getResponse", message);     }

引入jar包

<dependency><!-- 5.引入websocket-->
            <groupId>org.springframework.boot</groupId>
            <artifactId>spring-boot-starter-websocket</artifactId>
        </dependency>

 

1 配置config

1 2 3 4 5 6 7 8 9 10 11 12 13 package com.test.domi.config;   import org.springframework.context.annotation.Configuration; import org.springframework.messaging.simp.config.MessageBrokerRegistry; import org.springframework.web.socket.config.annotation.AbstractWebSocketMessageBrokerConfigurer; import org.springframework.web.socket.config.annotation.EnableWebSocketMessageBroker; import org.springframework.web.socket.config.annotation.StompEndpointRegistry;   @Configuration // @EnableWebSocketMessageBroker註解用於開啟使用STOMP協議來傳輸基於代理(MessageBroker)的訊息,這時候控制器(controller) // 開始支援@MessageMapping,就像是使用@requestMapping一樣。 @EnableWebSocketMessageBroker public class WebSocketConfig extends AbstractWebSocketMessageBrokerConfigurer {

/*將"/hello"路徑註冊為STOMP端點,這個路徑與傳送和接收訊息的目的路徑有所不同,這是一個端點,客戶端在訂閱或釋出訊息到目的地址前,要連線該端點,
* 即使用者傳送請求url="/applicationName/hello"與STOMP server進行連線。之後再轉發到訂閱url;
* PS:端點的作用——客戶端在訂閱或釋出訊息到目的地址前,要連線該端點。

1 2 3 4 5 @Override public void registerStompEndpoints(StompEndpointRegistry stompEndpointRegistry) {     //註冊一個Stomp的節點(endpoint),並指定使用SockJS協議。記得設定跨域     stompEndpointRegistry.addEndpoint("/endpointAric").setAllowedOrigins("*").withSockJS(); }

/**
* 配置了一個簡單的訊息代理,如果不過載,預設情況下回自動配置一個簡單的記憶體訊息代理,用來處理以"/topic"為字首的訊息。這裡過載configureMessageBroker()方法,
* 訊息代理將會處理字首為"/topic"和"/queue"的訊息。

1 2 3 4 5 6 7 8 9 10 11 12     @Override     public void configureMessageBroker(MessageBrokerRegistry registry) {         //服務端傳送訊息給客戶端的域,多個用逗號隔開         registry.enableSimpleBroker("/topic");         //定義一對一推送的時候字首         //registry.setUserDestinationPrefix("/user");         //定義websoket字首         //registry.setApplicationDestinationPrefixes("/ws-push");     }        }

  

 

2 controller

1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 package com.test.domi.controller;   import com.google.common.collect.Lists; import com.test.domi.service.impl.WebSocketService; import org.springframework.messaging.handler.annotation.MessageMapping; import org.springframework.messaging.handler.annotation.SendTo; import org.springframework.messaging.simp.SimpMessagingTemplate; import org.springframework.stereotype.Controller; import javax.annotation.Resource; import java.util.List;   @Controller public class WsController {       @Resource     private SimpMessagingTemplate template;       @MessageMapping("/welcome")//@MessageMapping和@RequestMapping功能類似,用於設定URL對映地址,瀏覽器向伺服器發起請求,需要通過該地址。     public void say(String message) throws Exception {         template.convertAndSend("/topic/getResponse", message);     }