主题
SpringBoot集成WebSocket
1. 添加依赖
首先,在你的pom.xml
文件中添加以下依赖:
xml
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-websocket</artifactId>
</dependency>
如果你使用的是Gradle,那么在build.gradle
中添加如下依赖:
shell
implementation 'org.springframework.boot:spring-boot-starter-websocket'
2. 配置WebSocket
在Spring Boot中,你需要配置一个WebSocketConfigurer
来启用WebSocket。但是,由于Spring Boot自动配置了大部分内容,你通常不需要显式地配置它。然而,如果你想自定义一些设置,例如改变默认的端点,你可以创建一个配置类并实现WebSocketConfigurer
接口。
java
@Configuration
public class WebSocketConfig implements WebSocketConfigurer {
@Override
public void registerWebSocketHandlers(WebSocketHandlerRegistry registry) {
registry.addHandler(myWebSocketHandler(), "/ws/chat").setAllowedOrigins("*");
}
@Bean
public TextWebSocketHandler myWebSocketHandler() {
return new MyWebSocketHandler();
}
}
这里,/ws/chat
是WebSocket的端点,MyWebSocketHandler
是你自定义的消息处理器。
3. 创建WebSocket处理器
你需要创建一个处理WebSocket消息的类,这个类需要继承TextWebSocketHandler
或WebSocketHandler
。下面是一个简单的例子:
java
@Component
public class MyWebSocketHandler extends TextWebSocketHandler {
@Override
protected void handleTextMessage(WebSocketSession session, TextMessage message) throws Exception {
String payload = message.getPayload();
System.out.println("Received: " + payload);
session.sendMessage(new TextMessage("Echo: " + payload));
}
}
这个处理器会接收文本消息,并将接收到的消息回传给客户端。
4. 客户端连接
客户端可以使用标准的WebSocket API来连接到服务器。例如,JavaScript客户端代码可能如下所示:
javascript
var socket = new WebSocket('ws://localhost:8080/ws/chat');
socket.onmessage = function(event) {
console.log('Received: ', event.data);
};
socket.send('Hello Server!');
5. 启用Simp支持(可选)
如果你想使用更高级的功能,如广播和订阅,你可以使用Spring的Simp框架。这需要在pom.xml
中添加spring-boot-starter-websocket
依赖,并在配置类中启用Simp。
java
@Configuration
@EnableWebSocketMessageBroker
public class WebSocketConfig implements WebSocketConfigurer {
@Override
public void registerWebSocketHandlers(WebSocketHandlerRegistry registry) {
registry.addHandler(myWebSocketHandler(), "/ws/chat").withSockJS();
}
@Bean
public MyWebSocketHandler myWebSocketHandler() {
return new MyWebSocketHandler();
}
@Override
public void configureMessageBroker(MessageBrokerRegistry config) {
config.enableSimpleBroker("/topic");
config.setApplicationDestinationPrefixes("/app");
}
}
这样,你就可以使用@MessageMapping
和@SubscribeMapping
注解来处理消息和订阅主题了。