SpringBoot入门 (十三) WebSocket使用
时间: 2024-05-03 15:18:01 浏览: 8
WebSocket是一种在单个TCP连接上进行全双工通信的协议。与HTTP不同,WebSocket允许服务器和客户端在任何时候开始发送数据,并且没有请求和响应之间的延迟。
WebSocket可以用于实时通信,如聊天应用程序、在线游戏和交易系统等。在Spring Boot中,我们可以使用Spring WebSocket来构建WebSocket应用程序。
下面是一个简单的示例,演示如何在Spring Boot中使用WebSocket。
首先,我们需要添加以下依赖项:
```xml
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-websocket</artifactId>
</dependency>
```
接下来,我们需要创建一个WebSocket配置类。该类应该扩展`AbstractWebSocketMessageBrokerConfigurer`类,并重写`registerStompEndpoints()`方法和`configureMessageBroker()`方法。
```java
@Configuration
@EnableWebSocketMessageBroker
public class WebSocketConfig extends AbstractWebSocketMessageBrokerConfigurer {
@Override
public void registerStompEndpoints(StompEndpointRegistry registry) {
registry.addEndpoint("/ws").withSockJS();
}
@Override
public void configureMessageBroker(MessageBrokerRegistry registry) {
registry.enableSimpleBroker("/topic");
registry.setApplicationDestinationPrefixes("/app");
}
}
```
在上面的代码中,我们使用`@EnableWebSocketMessageBroker`注解启用WebSocket消息代理。`registerStompEndpoints()`方法注册一个WebSocket端点,客户端可以使用该端点连接到服务器。`configureMessageBroker()`方法配置消息代理。
接下来,我们需要创建一个控制器类,用于处理WebSocket请求。该类应该使用`@Controller`注解和`@MessageMapping`注解来处理消息。例如,以下控制器类处理`/hello`端点的消息:
```java
@Controller
public class WebSocketController {
@MessageMapping("/hello")
@SendTo("/topic/greetings")
public Greeting greeting(HelloMessage message) throws Exception {
Thread.sleep(1000);
return new Greeting("Hello, " + message.getName() + "!");
}
}
```
在上面的代码中,`@MessageMapping`注解指定要处理的消息的端点。`@SendTo`注解指定要将响应发送到的目标。在这种情况下,响应将被发送到`/topic/greetings`目标。
最后,我们需要创建一个WebSocket客户端。以下是一个简单的JavaScript示例,演示如何连接到WebSocket服务器,并发送和接收消息:
```javascript
var stompClient = null;
function connect() {
var socket = new SockJS('/ws');
stompClient = Stomp.over(socket);
stompClient.connect({}, function(frame) {
console.log('Connected: ' + frame);
stompClient.subscribe('/topic/greetings', function(greeting) {
showGreeting(JSON.parse(greeting.body).content);
});
});
}
function sendName() {
var name = document.getElementById('name').value;
stompClient.send('/app/hello', {}, JSON.stringify({ 'name': name }));
}
function showGreeting(message) {
var greeting = document.createElement('div');
greeting.appendChild(document.createTextNode(message));
document.getElementById('greetings').appendChild(greeting);
}
```
在上面的代码中,`connect()`函数连接到WebSocket服务器,并订阅`/topic/greetings`目标。`sendName()`函数将消息发送到`/app/hello`端点。`showGreeting()`函数显示接收到的消息。
这是一个非常简单的示例,演示如何在Spring Boot中使用WebSocket。使用Spring WebSocket,您可以构建复杂的实时应用程序,例如聊天应用程序和在线游戏。