spring boot websocket实时推送数据
时间: 2025-03-04 14:38:37 浏览: 46
### Spring Boot 中实现 WebSocket 实时推送数据
#### 配置依赖项
为了在项目中使用 WebSocket 功能,需要引入相应的 Maven 或 Gradle 依赖。对于 Maven 用户,在 `pom.xml` 文件中添加如下配置[^1]:
```xml
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-websocket</artifactId>
</dependency>
```
#### 启用 WebSocket 支持
创建一个新的 Java 类来启用并配置 WebSocket 的支持。通过继承 `WebSocketConfigurer` 接口可以自定义握手拦截器和其他设置。
```java
@Configuration
@EnableWebSocketMessageBroker
public class WebSocketConfig implements WebSocketConfigurer {
@Override
public void registerStompEndpoints(StompEndpointRegistry registry) {
// 注册STOMP端点,并允许跨域请求
registry.addEndpoint("/ws").setAllowedOrigins("*");
// 使用SockJS作为降级方案
registry.addEndpoint("/ws").setAllowedOrigins("*").withSockJS();
}
@Override
public void configureMessageBroker(MessageBrokerRegistry config) {
// 设置应用目的地前缀为"/app"
config.enableSimpleBroker("/topic");
// 客户端订阅的消息路径以 "/app" 开头
config.setApplicationDestinationPrefixes("/app");
}
}
```
#### 创建控制器处理消息发送逻辑
编写一个简单的 REST 控制器用于接收 HTTP 请求并将消息推送给所有已连接客户端。
```java
@Controller
public class MessageController {
private final SimpMessagingTemplate template;
@Autowired
public MessageController(SimpMessagingTemplate template){
this.template = template;
}
@GetMapping(value="/send/{message}")
@ResponseBody
String sendMessage(@PathVariable String message){
// 将接收到的信息广播给所有订阅者
template.convertAndSend("/topic/messages", "New Message: "+message);
return "Sent";
}
}
```
#### 前端页面建立 WebSocket 连接
HTML 页面可以通过 JavaScript 来监听来自服务器的通知。这里展示了一个基本的例子,它会尝试与 WebSocket 服务器建立 SockJS 连接,并显示任何新到达的消息。
```html
<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8"/>
<title>WebSocket Example</title>
<script src="https://cdn.jsdelivr.net/npm/sockjs-client@1/dist/sockjs.min.js"></script>
<script src="https://cdnjs.cloudflare.com/ajax/libs/stomp.js/2.3.3/stomp.min.js"></script>
<body>
<div id='messages'></div>
<script type="text/javascript">
var socket = new SockJS('/ws');
var stompClient = Stomp.over(socket);
stompClient.connect({}, function (frame) {
console.log('Connected: ' + frame);
// 订阅主题 /topic/messages 并更新 DOM 显示最新消息
stompClient.subscribe('/topic/messages', function (greeting) {
document.getElementById('messages').innerHTML += "<br/>" + greeting.body;
});
});
</script>
</body>
</html>
```
以上就是基于 Spring Boot 和 WebSocket 技术构建的一个简单实时通信系统的示例。
阅读全文
相关推荐



















