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