refactor: 完善websocket配置和测试用例
This commit is contained in:
@@ -9,24 +9,46 @@ import org.springframework.web.socket.config.annotation.WebSocketMessageBrokerCo
|
||||
|
||||
/**
|
||||
* WebSocket 配置类
|
||||
* <p>
|
||||
* STOMP 不是一个传输协议,而是一个简单的文本消息协议,定义消息格式和交换规则
|
||||
*
|
||||
* @author haoxr
|
||||
* @since 2.3.0
|
||||
*/
|
||||
@Configuration
|
||||
@ConditionalOnProperty(name = "system.config.websocket-enabled")// system.config.websocket-enabled = true 才会自动装配
|
||||
@EnableWebSocketMessageBroker // 注解告诉Spring框架要开启WebSocket消息代理的功能,并配置相关的端点和消息代理
|
||||
@EnableWebSocketMessageBroker // 启用WebSocket消息代理功能和配置STOMP协议,实现实时双向通信和消息传递
|
||||
public class WebSocketConfig implements WebSocketMessageBrokerConfigurer {
|
||||
|
||||
|
||||
@Override
|
||||
public void configureMessageBroker(MessageBrokerRegistry registry) {
|
||||
registry.enableSimpleBroker("/topic", "/user");
|
||||
}
|
||||
|
||||
/**
|
||||
* 配置和注册WebSocket端点(endpoints)
|
||||
*/
|
||||
@Override
|
||||
public void registerStompEndpoints(StompEndpointRegistry registry) {
|
||||
// 注册了一个 /ws 的端点,用于建立WebSocket连接。
|
||||
registry.addEndpoint("/ws").setAllowedOriginPatterns("*");
|
||||
registry
|
||||
.addEndpoint("/ws") // 注册了一个 /ws 的端点
|
||||
.setAllowedOriginPatterns("*") // 允许跨域的 WebSocket 连接
|
||||
.withSockJS() // 启用 SockJS (浏览器不支持WebSocket,SockJS 将会提供兼容性支持)
|
||||
;
|
||||
}
|
||||
|
||||
|
||||
/**
|
||||
* 配置消息代理(Message Broker)
|
||||
* <p>
|
||||
* 设置消息传输的规则和前缀
|
||||
*/
|
||||
@Override
|
||||
public void configureMessageBroker(MessageBrokerRegistry registry) {
|
||||
// 客户端发送消息的请求前缀
|
||||
registry.setApplicationDestinationPrefixes("/app");
|
||||
|
||||
// 客户端订阅消息的请求前缀,topic一般用于广播推送,queue用于点对点推送
|
||||
registry.enableSimpleBroker("/topic", "/queue");
|
||||
|
||||
// 服务端通知客户端的前缀,可以不设置,默认为user
|
||||
registry.setUserDestinationPrefix("/user");
|
||||
}
|
||||
|
||||
}
|
||||
|
||||
@@ -1,6 +1,5 @@
|
||||
package com.youlai.system.controller;
|
||||
|
||||
import cn.hutool.json.JSONUtil;
|
||||
import com.youlai.system.common.result.Result;
|
||||
import lombok.RequiredArgsConstructor;
|
||||
import lombok.extern.slf4j.Slf4j;
|
||||
@@ -48,13 +47,12 @@ public class WebsocketController {
|
||||
/**
|
||||
* 点对点发送消息
|
||||
*
|
||||
* @param userId 用户ID
|
||||
* @param username 用户名
|
||||
*/
|
||||
@PostMapping("/sendToUser/{userId}")
|
||||
public Result sendToUser(@PathVariable Long userId, String message) {
|
||||
log.info("【点对点请求接收】用户:{};消息:{}", userId, JSONUtil.toJsonStr(message));
|
||||
@PostMapping("/sendToUser/{username}")
|
||||
public Result sendToUser(@PathVariable String username) {
|
||||
// 发送主题目的(destination)= /user/{userId}/message
|
||||
messagingTemplate.convertAndSendToUser(String.valueOf(userId), "/message", message);
|
||||
messagingTemplate.convertAndSendToUser(username, "/queue/user", "hello "+username);
|
||||
return Result.success("点对点消息发送成功");
|
||||
}
|
||||
|
||||
|
||||
Reference in New Issue
Block a user