springboot整合websocket
时间: 2023-09-02 12:11:40 浏览: 259
Spring Boot可以通过Spring WebSocket模块来轻松地实现WebSocket的功能。下面是一个简单的例子,展示了如何在Spring Boot中使用WebSocket。
1. 添加依赖
在pom.xml文件中添加以下依赖:
```xml
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-websocket</artifactId>
</dependency>
```
2. 实现WebSocket处理程序
创建一个WebSocket处理程序类,实现WebSocketHandler接口。在该类中,可以实现onOpen,onMessage,onError和onClose等方法,以处理WebSocket连接的各种事件。
```java
@Component
public class WebSocketHandler implements org.springframework.web.socket.WebSocketHandler {
private static final Logger LOGGER = LoggerFactory.getLogger(WebSocketHandler.class);
private final List<WebSocketSession> sessions = new CopyOnWriteArrayList<>();
@Override
public void afterConnectionEstablished(WebSocketSession session) throws Exception {
LOGGER.info("WebSocket connection established");
sessions.add(session);
}
@Override
public void handleMessage(WebSocketSession session, WebSocketMessage<?> message) throws Exception {
LOGGER.info("WebSocket message received: " + message.getPayload().toString());
for (WebSocketSession s : sessions) {
s.sendMessage(message);
}
}
@Override
public void handleTransportError(WebSocketSession session, Throwable exception) throws Exception {
LOGGER.error("WebSocket transport error", exception);
}
@Override
public void afterConnectionClosed(WebSocketSession session, CloseStatus closeStatus) throws Exception {
LOGGER.info("WebSocket connection closed: " + closeStatus.getReason());
sessions.remove(session);
}
@Override
public boolean supportsPartialMessages() {
return false;
}
}
```
在上面的代码中,我们实现了WebSocketHandler接口,并覆盖了其5个方法。在afterConnectionEstablished方法中,我们将新建的WebSocketSession添加到sessions列表中。在handleMessage方法中,我们将收到的消息转发给所有已连接的WebSocketSession。
3. 配置WebSocket端点
在Spring Boot的配置类中,使用@EnableWebSocket注解启用WebSocket,并配置一个WebSocket端点。
```java
@Configuration
@EnableWebSocket
public class WebSocketConfig implements WebSocketConfigurer {
@Autowired
private WebSocketHandler webSocketHandler;
@Override
public void registerWebSocketHandlers(WebSocketHandlerRegistry registry) {
registry.addHandler(webSocketHandler, "/my-websocket-endpoint").setAllowedOrigins("*");
}
}
```
在上面的代码中,我们使用@Autowired注解注入了之前创建的WebSocketHandler,并将其配置为WebSocket端点。我们还使用setAllowedOrigins("*")方法,以允许来自任何域的WebSocket连接。
4. 测试WebSocket连接
可以使用任何WebSocket客户端来测试WebSocket连接。以下是一个简单的JavaScript客户端示例:
```javascript
var ws = new WebSocket("ws://localhost:8080/my-websocket-endpoint");
ws.onopen = function() {
ws.send("Hello, WebSocket!");
};
ws.onmessage = function(event) {
console.log("WebSocket message received: " + event.data);
};
ws.onclose = function(event) {
console.log("WebSocket connection closed: " + event.reason);
};
```
在上面的代码中,我们创建了一个WebSocket连接,并在连接建立后发送了一条消息。我们还监听了onmessage和onclose事件,以处理收到的消息和WebSocket连接关闭事件。
5. 运行程序
现在,可以运行程序并使用上述JavaScript客户端来测试WebSocket连接。在控制台中,可以看到WebSocketHandler类中的日志输出。
阅读全文