springboot 利用socket和服务端连接,如何发送消息给服务端,和动态接受服务端消息,和访问服务端API,给个demo
时间: 2024-03-01 14:54:41 浏览: 16
好的,以下是一个使用 Spring Boot 和 WebSocket 技术实现客户端与服务端连接的示例:
1. 创建 Spring Boot 项目,并添加以下依赖:
```
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-websocket</artifactId>
</dependency>
```
2. 创建 WebSocket 配置类,用于配置 WebSocket 相关的 Bean:
```
@Configuration
@EnableWebSocket
public class WebSocketConfig implements WebSocketConfigurer {
@Override
public void registerWebSocketHandlers(WebSocketHandlerRegistry registry) {
registry.addHandler(new MyWebSocketHandler(), "/my-websocket");
}
}
```
3. 创建 WebSocket 处理器类,用于处理客户端和服务端之间的消息:
```
public class MyWebSocketHandler extends TextWebSocketHandler {
@Override
public void handleTextMessage(WebSocketSession session, TextMessage message) throws Exception {
String payload = message.getPayload(); // 获取客户端发送的消息
// 处理消息
session.sendMessage(new TextMessage("Hello, " + payload)); // 发送消息给客户端
}
}
```
4. 创建客户端页面,用于发送和接收消息:
```
<!DOCTYPE html>
<html>
<head>
<title>WebSocket Demo</title>
<script src="https://code.jquery.com/jquery-3.5.1.min.js"></script>
<script>
var socket = new WebSocket("ws://localhost:8080/my-websocket");
socket.onopen = function(event) {
console.log("WebSocket opened.");
};
socket.onmessage = function(event) {
console.log("Received message: " + event.data);
};
function sendMessage() {
var message = $("#message").val();
socket.send(message);
}
</script>
</head>
<body>
<input type="text" id="message">
<button onclick="sendMessage()">Send</button>
</body>
</html>
```
5. 运行项目,并访问客户端页面。在页面中输入消息并点击 Send 按钮,即可发送消息给服务端。服务端处理完消息后,会将处理结果返回给客户端,并在浏览器控制台中输出。
6. 访问服务端 API,可以使用 Spring MVC 或 Spring WebFlux 模块提供的注解来定义 API 接口,并在接口实现方法中处理 WebSocket 消息。例如:
```
@RestController
public class MyController {
@GetMapping("/hello")
public String sayHello() {
return "Hello, World!";
}
@MessageMapping("/my-message")
@SendTo("/topic/my-topic")
public String handleMessage(String message) {
return "Received message: " + message;
}
}
```
这里使用 `@MessageMapping` 和 `@SendTo` 注解来定义 WebSocket 消息处理方法,并将处理结果发送到 `/topic/my-topic` 主题中。客户端可以使用 `Stomp.js` 或 `SockJS` 等 JavaScript 库来订阅主题并接收服务端消息。