Spring stomp 如何编写一个websocket
时间: 2024-05-03 22:18:39 浏览: 151
Spring提供了一个集成了STOMP(Simple Text Oriented Messaging Protocol)的WebSocket支持,可以用于构建实时的、交互式的Web应用程序。下面是一个简单的Spring Boot应用程序,演示如何构建一个WebSocket端点:
1. 首先,在pom.xml文件中添加以下依赖项:
```
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-websocket</artifactId>
</dependency>
```
2. 创建一个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();
}
}
```
- `@EnableWebSocketMessageBroker` 注解用于启用WebSocket消息代理。
- `configureMessageBroker()` 方法用于配置消息代理。在上面的例子中,使用了简单的内存消息代理,并将消息前缀设置为“/topic”和“/app”。
- `registerStompEndpoints()` 方法用于注册WebSocket端点。在上面的例子中,将端点设置为“/websocket”,并启用SockJS支持。
3. 创建一个控制器类,用于处理WebSocket请求:
```java
@Controller
public class WebSocketController {
@MessageMapping("/hello")
@SendTo("/topic/greetings")
public Greeting greeting(HelloMessage message) throws Exception {
Thread.sleep(1000); // simulated delay
return new Greeting("Hello, " + message.getName() + "!");
}
}
```
- `@MessageMapping` 注解用于指定WebSocket请求的目标。
- `@SendTo` 注解用于指定将响应发送到的消息代理目标。
4. 创建一个消息模型类:
```java
public class HelloMessage {
private String name;
public String getName() {
return name;
}
public void setName(String name) {
this.name = name;
}
}
```
5. 创建一个响应模型类:
```java
public class Greeting {
private String content;
public Greeting(String content) {
this.content = content;
}
public String getContent() {
return content;
}
}
```
6. 最后,创建一个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>
var stompClient = null;
function connect() {
var socket = new SockJS('/websocket');
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 disconnect() {
if (stompClient != null) {
stompClient.disconnect();
}
console.log("Disconnected");
}
function sendName() {
var name = $("#name").val();
stompClient.send("/app/hello", {}, JSON.stringify({'name': name}));
}
function showGreeting(message) {
$("#greetings").append("<tr><td>" + message + "</td></tr>");
}
</script>
</head>
<body>
<div>
<label for="name">Name:</label>
<input type="text" id="name">
<button onclick="connect();">Connect</button>
<button onclick="disconnect();">Disconnect</button>
</div>
<div>
<table>
<thead>
<tr>
<th>Greetings</th>
</tr>
</thead>
<tbody id="greetings">
</tbody>
</table>
</div>
</body>
</html>
```
在上面的HTML文件中,使用了SockJS和STOMP库来连接WebSocket端点,并在发送请求时使用JSON格式来序列化请求模型。
以上就是一个简单的Spring Boot应用程序,演示了如何构建WebSocket端点。你可以根据需要进行更改和扩展。
阅读全文