springboot集成websocket
时间: 2023-10-01 19:03:05 浏览: 48
Spring Boot集成WebSocket可以让我们轻松地实现实时消息推送功能。下面是一个简单的示例,演示如何使用Spring Boot集成WebSocket。
1. 添加依赖
在pom.xml文件中添加以下依赖:
```xml
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-websocket</artifactId>
</dependency>
```
2. 创建WebSocket配置类
创建一个WebSocketConfig类,用于配置WebSocket。
```java
@Configuration
@EnableWebSocket
public class WebSocketConfig implements WebSocketConfigurer {
@Autowired
private WebSocketHandlerImpl webSocketHandler;
@Override
public void registerWebSocketHandlers(WebSocketHandlerRegistry registry) {
registry.addHandler(webSocketHandler, "/websocket").setAllowedOrigins("*");
}
}
```
这里使用@EnableWebSocket注解启用WebSocket,并注册WebSocket处理程序。
3. 创建WebSocket处理程序
创建一个WebSocket处理程序,在接收到WebSocket请求时处理消息。
```java
@Component
public class WebSocketHandlerImpl extends TextWebSocketHandler {
private static final Logger LOGGER = LoggerFactory.getLogger(WebSocketHandlerImpl.class);
private List<WebSocketSession> sessions = new CopyOnWriteArrayList<>();
@Override
public void afterConnectionEstablished(WebSocketSession session) throws Exception {
LOGGER.info("Connection established: " + session.getId());
sessions.add(session);
}
@Override
protected void handleTextMessage(WebSocketSession session, TextMessage message) throws Exception {
LOGGER.info("Received message: " + message.getPayload());
for (WebSocketSession webSocketSession : sessions) {
if (webSocketSession.isOpen()) {
webSocketSession.sendMessage(message);
}
}
}
@Override
public void afterConnectionClosed(WebSocketSession session, CloseStatus status) throws Exception {
LOGGER.info("Connection closed: " + session.getId());
sessions.remove(session);
}
}
```
这里使用@Component注解将WebSocket处理程序声明为Spring组件。WebSocketHandlerImpl继承自TextWebSocketHandler,用于处理文本消息。在afterConnectionEstablished方法中,我们将WebSocketSession添加到sessions列表中。在handleTextMessage方法中,我们将收到的消息发送给所有打开的WebSocketSession。在afterConnectionClosed方法中,我们将WebSocketSession从sessions列表中删除。
4. 创建WebSocket客户端
创建一个WebSocket客户端,用于向WebSocket服务器发送消息。
```java
@Component
public class WebSocketClientImpl implements CommandLineRunner {
private static final Logger LOGGER = LoggerFactory.getLogger(WebSocketClientImpl.class);
@Override
public void run(String... args) throws Exception {
WebSocketClient webSocketClient = new StandardWebSocketClient();
WebSocketSession webSocketSession = webSocketClient.doHandshake(new MyWebSocketHandler(), "ws://localhost:8080/websocket").get();
webSocketSession.sendMessage(new TextMessage("Hello, WebSocket!"));
Thread.sleep(1000);
webSocketSession.close();
}
private static class MyWebSocketHandler extends TextWebSocketHandler {
@Override
public void afterConnectionEstablished(WebSocketSession session) throws Exception {
LOGGER.info("Connection established: " + session.getId());
}
@Override
protected void handleTextMessage(WebSocketSession session, TextMessage message) throws Exception {
LOGGER.info("Received message: " + message.getPayload());
}
@Override
public void afterConnectionClosed(WebSocketSession session, CloseStatus status) throws Exception {
LOGGER.info("Connection closed: " + session.getId());
}
}
}
```
这里使用@Component注解将WebSocket客户端声明为Spring组件。在CommandLineRunner的run方法中,我们使用StandardWebSocketClient创建WebSocket客户端,并使用doHandshake方法连接到WebSocket服务器。我们将消息发送到WebSocket服务器,并在1秒后关闭WebSocketSession。
5. 运行应用程序
现在,我们可以运行应用程序并访问http://localhost:8080。WebSocket服务器将在/ws路径下运行。我们可以使用WebSocket客户端发送消息并在WebSocket服务器上接收到。