使用Spring Boot实现WebSocket实时数据传输
·
WebSocket是一种在单个TCP连接上进行全双工通信的协议,非常适合需要实时数据推送的场景(如聊天室、实时监控等)。本文将通过Spring Boot演示如何建立WebSocket服务并实现前后端实时通信。
一、环境准备
使用[Spring Initializr]创建项目,添加以下依赖:
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-websocket</artifactId>
</dependency>
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-web</artifactId>
</dependency>
二、服务端实现
1. 配置WebSocket
@Configuration
@EnableWebSocketMessageBroker
public class WebSocketConfig implements WebSocketMessageBrokerConfigurer {
// 注册STOMP端点
@Override
public void registerStompEndpoints(StompEndpointRegistry registry) {
registry.addEndpoint("/ws")
.setAllowedOriginPatterns("*")
.withSockJS();
}
// 配置消息代理
@Override
public void configureMessageBroker(MessageBrokerRegistry registry) {
registry.enableSimpleBroker("/topic"); // 客户端订阅地址前缀
registry.setApplicationDestinationPrefixes("/app"); // 服务端接收地址前缀
}
}
2. 创建消息控制器
@Controller
public class MessageController {
@Autowired
private SimpMessagingTemplate messagingTemplate;
// 处理客户端发来的消息
@MessageMapping("/send/message")
public void handleMessage(String message) {
// 广播消息给所有订阅/topic/messages的客户端
messagingTemplate.convertAndSend("/topic/messages",
"Server响应: " + message + " [" + LocalDateTime.now() + "]");
}
}
三、前端实现
<!DOCTYPE html>
<html>
<body>
<input type="text" id="messageInput">
<button onclick="sendMessage()">发送</button>
<div id="messages"></div>
<script src="https://cdn.jsdelivr.net/npm/sockjs-client@1.5.0/dist/sockjs.min.js"></script>
<script src="https://cdnjs.cloudflare.com/ajax/libs/stomp.js/2.3.3/stomp.min.js"></script>
<script>
const socket = new SockJS('http://localhost:8080/ws');
const stompClient = Stomp.over(socket);
stompClient.connect({}, (frame) => {
// 订阅消息通道
stompClient.subscribe('/topic/messages', (response) => {
const msgDiv = document.createElement('div');
msgDiv.textContent = response.body;
document.getElementById('messages').appendChild(msgDiv);
});
});
function sendMessage() {
const message = document.getElementById('messageInput').value;
stompClient.send("/app/send/message", {}, message);
}
</script>
</body>
</html>
四、运行测试
1. 启动Spring Boot应用
2. 访问HTML页面(可打开多个浏览器窗口模拟多个客户端)
3. 输入消息并发送,观察所有客户端实时更新
五、生产环境建议
1. 使用RabbitMQ或ActiveMQ作为消息代理(替代内存代理)
2. 添加JWT鉴权机制
3. 配置消息大小限制(默认限制为64KB)
4. 实现连接状态监听器(统计在线用户等)
通过这个示例,您可以快速为Spring Boot应用添加实时通信能力。根据具体业务需求,可以扩展消息类型处理、用户定向推送等功能。
DAMO开发者矩阵,由阿里巴巴达摩院和中国互联网协会联合发起,致力于探讨最前沿的技术趋势与应用成果,搭建高质量的交流与分享平台,推动技术创新与产业应用链接,围绕“人工智能与新型计算”构建开放共享的开发者生态。
更多推荐



所有评论(0)