spring boot通过websocket向前端推送信息
时间: 2023-07-30 19:10:21 浏览: 150
如何使用Spring Boot 3.X + WebSocket来实现推送消息功能(2)
要在Spring Boot应用中使用WebSocket向前端推送信息,可以使用Spring的WebSocket支持,它提供了一个WebSocketHandler来处理WebSocket连接和消息。
以下是一个简单的示例代码,用于向所有已连接的WebSocket客户端推送当前时间:
1. 首先,需要在POM文件中添加Spring WebSocket的依赖:
```xml
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-websocket</artifactId>
</dependency>
```
2. 创建一个WebSocketHandler类,处理WebSocket连接和消息:
```java
import org.springframework.stereotype.Component;
import org.springframework.web.socket.WebSocketHandler;
import org.springframework.web.socket.WebSocketSession;
import org.springframework.web.socket.handler.TextWebSocketHandler;
import java.util.ArrayList;
import java.util.List;
import java.util.concurrent.CopyOnWriteArrayList;
@Component
public class MyWebSocketHandler extends TextWebSocketHandler {
private final List<WebSocketSession> sessions = new CopyOnWriteArrayList<>();
@Override
public void afterConnectionEstablished(WebSocketSession session) throws Exception {
// 添加新连接
sessions.add(session);
}
@Override
public void afterConnectionClosed(WebSocketSession session, CloseStatus status) throws Exception {
// 移除已关闭的连接
sessions.remove(session);
}
public void pushMessage(String message) {
// 向所有已连接的客户端推送消息
for (WebSocketSession session : sessions) {
session.sendMessage(new TextMessage(message));
}
}
}
```
在上面的代码中,我们继承了TextWebSocketHandler,并实现了afterConnectionEstablished()和afterConnectionClosed()方法来处理连接的打开和关闭事件。我们还添加了一个pushMessage()方法,用于向所有已连接的客户端推送消息。
3. 在Controller中注入MyWebSocketHandler,并在需要推送消息的时候调用它的pushMessage()方法:
```java
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.web.bind.annotation.GetMapping;
import org.springframework.web.bind.annotation.RestController;
@RestController
public class MyController {
@Autowired
private MyWebSocketHandler webSocketHandler;
@GetMapping("/push")
public String push() {
webSocketHandler.pushMessage("Current time: " + LocalDateTime.now());
return "OK";
}
}
```
在上面的代码中,我们注入了MyWebSocketHandler,并在/push接口中调用它的pushMessage()方法,向所有已连接的WebSocket客户端推送当前时间。
4. 在前端页面中,使用JavaScript连接WebSocket,并监听来自服务器的消息:
```javascript
var socket = new WebSocket("ws://" + window.location.host + "/websocket");
socket.onmessage = function(event) {
console.log(event.data);
};
```
在上面的代码中,我们使用WebSocket连接到服务器上的/websocket路径,并监听来自服务器的消息。当服务器向客户端推送消息时,onmessage事件会被触发,我们在这里打印出收到的消息。
这样,当我们访问/push接口时,服务器会向所有已连接的WebSocket客户端推送当前时间。在前端页面中,我们可以监听这些推送的消息,并实时更新页面。
阅读全文