使用spring boot 写一个 websocket代码
时间: 2023-11-20 10:03:15 浏览: 73
好的,下面是一个使用 Spring Boot 实现 WebSocket 的示例代码:
首先,需要在 pom.xml 中添加 WebSocket 和 Spring WebSocket 的依赖:
```xml
<dependencies>
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-websocket</artifactId>
</dependency>
<dependency>
<groupId>org.springframework</groupId>
<artifactId>spring-messaging</artifactId>
</dependency>
</dependencies>
```
然后,创建一个 WebSocket 配置类,用于配置 WebSocket 相关的参数:
```java
@Configuration
@EnableWebSocketMessageBroker
public class WebSocketConfig implements WebSocketMessageBrokerConfigurer {
@Override
public void configureMessageBroker(MessageBrokerRegistry config) {
config.enableSimpleBroker("/topic");
config.setApplicationDestinationPrefixes("/app");
}
@Override
public void registerStompEndpoints(StompEndpointRegistry registry) {
registry.addEndpoint("/websocket").withSockJS();
}
}
```
上面的代码中,`configureMessageBroker()` 方法用于配置消息代理(Message Broker),这里使用的是 SimpleBroker,它会将消息广播给所有订阅了特定主题(Topic)的客户端。`setApplicationDestinationPrefixes()` 方法用于设置应用程序前缀,这里设置的是 `/app`,表示客户端发送的消息会以 `/app` 开头。`registerStompEndpoints()` 方法用于注册一个 WebSocket 端点,客户端可以通过这个端点进行连接。
接下来,创建一个 WebSocket 控制器,用于处理客户端的连接和消息:
```java
@Controller
public class WebSocketController {
@MessageMapping("/hello")
@SendTo("/topic/greetings")
public String greeting(String message) throws Exception {
Thread.sleep(1000); // simulated delay
return "Hello, " + message + "!";
}
}
```
上面的代码中,`@MessageMapping("/hello")` 注解表示处理客户端发送到 `/app/hello` 的消息,`@SendTo("/topic/greetings")` 注解表示将处理结果发送到 `/topic/greetings` 主题。在这个示例中,服务器会将客户端发送的消息返回,并在消息前加上 "Hello, ",最终发送到 `/topic/greetings` 主题。
最后,创建一个 HTML 页面,用于与 WebSocket 进行交互:
```html
<!DOCTYPE html>
<html>
<head>
<title>WebSocket Example</title>
<script src="/webjars/jquery/jquery.min.js"></script>
<script src="/webjars/sockjs-client/sockjs.min.js"></script>
<script src="/webjars/stomp-websocket/stomp.min.js"></script>
<script>
$(function () {
var socket = new SockJS('/websocket');
var stompClient = Stomp.over(socket);
stompClient.connect({}, function (frame) {
console.log('Connected: ' + frame);
stompClient.subscribe('/topic/greetings', function (greeting) {
$('#greetings').append('<tr><td>' + JSON.parse(greeting.body) + '</td></tr>');
});
});
$('form').on('submit', function (e) {
e.preventDefault();
var message = $('#message').val();
stompClient.send('/app/hello', {}, message);
$('#message').val('');
});
});
</script>
</head>
<body>
<form>
<input type="text" id="message" />
<button>Send</button>
</form>
<table>
<thead>
<tr><th>Greetings</th></tr>
</thead>
<tbody id="greetings"></tbody>
</table>
</body>
</html>
```
上面的代码中,通过 SockJS 和 STOMP 连接到 WebSocket 端点,使用 `subscribe()` 方法订阅 `/topic/greetings` 主题,使用 `send()` 方法发送消息。当服务器向 `/topic/greetings` 主题发送消息时,会在页面上添加一条记录。
至此,一个简单的 Spring Boot WebSocket 示例就完成了。
阅读全文