通过Spring Boot集成WebSocket进行消息通信

通过Spring Boot集成WebSocket进行消息通信

1. 创建 Spring Boot 项目

你可以通过 Spring Initializr(start.spring.io/ )创建一个新的 Spring Boot 项目,添加 Spring WebSpring Boot DevTools 依赖,同时也可以添加 Lombok 依赖来简化代码。

2. 添加 WebSocket 依赖

pom.xml 中添加 Spring Boot WebSocket 相关依赖:

xml 复制代码
<dependency>
    <groupId>org.springframework.boot</groupId>
    <artifactId>spring-boot-starter-websocket</artifactId>
</dependency>

3. 配置 WebSocket

创建一个配置类来配置 WebSocket 端点和拦截器(可选):

java 复制代码
import org.springframework.context.annotation.Bean;
import org.springframework.context.annotation.Configuration;
import org.springframework.web.socket.config.annotation.EnableWebSocket;
import org.springframework.web.socket.config.annotation.WebSocketConfigurer;
import org.springframework.web.socket.config.annotation.WebSocketHandlerRegistry;
import org.springframework.web.socket.server.standard.ServletServerContainerFactoryBean;

@Configuration
@EnableWebSocket
public class WebSocketConfig implements WebSocketConfigurer {

    @Override
    public void registerWebSocketHandlers(WebSocketHandlerRegistry registry) {
        registry.addHandler(myHandler(), "/ws").setAllowedOrigins("*");
    }

    @Bean
    public MyWebSocketHandler myHandler() {
        return new MyWebSocketHandler();
    }

    @Bean
    public ServletServerContainerFactoryBean createWebSocketContainer() {
        ServletServerContainerFactoryBean container = new ServletServerContainerFactoryBean();
        container.setMaxTextMessageBufferSize(8192);
        container.setMaxBinaryMessageBufferSize(8192);
        return container;
    }
}

4. 创建 WebSocket 处理器

创建一个类来处理 WebSocket 连接、消息接收和关闭等事件:

java 复制代码
import org.springframework.web.socket.TextMessage;
import org.springframework.web.socket.WebSocketSession;
import org.springframework.web.socket.handler.TextWebSocketHandler;

import java.io.IOException;

public class MyWebSocketHandler extends TextWebSocketHandler {

    @Override
    protected void handleTextMessage(WebSocketSession session, TextMessage message) throws IOException {
        String payload = message.getPayload();
        // 处理接收到的消息
        session.sendMessage(new TextMessage("Server received: " + payload));
    }

    @Override
    public void afterConnectionEstablished(WebSocketSession session) throws Exception {
        // 连接建立后的处理逻辑
        session.sendMessage(new TextMessage("Connection established"));
    }

    @Override
    public void afterConnectionClosed(WebSocketSession session, int statusCode, String reason) throws Exception {
        // 连接关闭后的处理逻辑
    }
}

5. 创建控制器(可选)

如果你需要通过 HTTP 请求来触发一些与 WebSocket 相关的操作,可以创建一个控制器:

java 复制代码
import org.springframework.web.bind.annotation.GetMapping;
import org.springframework.web.bind.annotation.RestController;

@RestController
public class WebSocketController {

    @GetMapping("/test")
    public String test() {
        return "WebSocket test";
    }
}

6. 前端页面测试

创建一个简单的 HTML 页面来测试 WebSocket 连接:

html 复制代码
<!DOCTYPE html>
<html lang="en">
<head>
    <meta charset="UTF-8">
    <title>WebSocket Test</title>
</head>
<body>
    <input type="text" id="messageInput" placeholder="Enter message">
    <button onclick="sendMessage()">Send</button>
    <div id="output"></div>

    <script>
        var socket = new WebSocket('ws://localhost:8080/ws');

        socket.onopen = function(event) {
            document.getElementById('output').innerHTML += '<p>Connected</p>';
        };

        socket.onmessage = function(event) {
            document.getElementById('output').innerHTML += '<p>' + event.data + '</p>';
        };

        socket.onclose = function(event) {
            document.getElementById('output').innerHTML += '<p>Disconnected</p>';
        };

        function sendMessage() {
            var message = document.getElementById('messageInput').value;
            if (message) {
                socket.send(message);
                document.getElementById('messageInput').value = '';
            }
        }
    </script>
</body>
</html>

7. 运行项目

启动 Spring Boot 项目,然后在浏览器中打开 HTML 页面。你可以在输入框中输入消息并点击发送按钮,查看与服务器的 WebSocket 通信情况。

注意事项

  • 确保你的服务器端口(默认为 8080)没有被其他应用程序占用。
  • 在生产环境中,需要考虑 WebSocket 的安全性,如使用 SSL/TLS 加密连接。

通过以上步骤,你就可以在 Spring Boot 项目中成功集成 WebSocket 并实现基本的消息通信功能。

相关推荐
ch.ju几秒前
Java程序设计(第3版)第二章——表达式和算术运算符
java
发发就是发4 分钟前
顺序锁(Seqlock)与RCU机制:当读写锁遇上性能瓶颈
java·linux·服务器·开发语言·jvm·驱动开发
我命由我123457 分钟前
Android Jetpack Compose - ModalNavigationDrawer、NavigationRail、PullToRefreshBox
android·java·java-ee·android studio·android jetpack·android-studio·android runtime
Byron__14 分钟前
HashSet/LinkedHashSet/TreeSet 原理解析
java
苏瞳儿32 分钟前
创建后端项目-连接MySql并运行成功
java
菜鸟小九1 小时前
JUC(共享模型之管程、synchronized、wait、park、活跃性、renetrantlock、条件变量)
java·开发语言·juc
kongba0071 小时前
学习COZE编程 / LangGraph 通用工作流项目 提示词模板
java·网络·学习
程序员阿明1 小时前
spring boot3识别PDF图纸
java·spring boot·后端·pdf
blxr_1 小时前
Spring AI自定义Advisor
java·spring