通过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 并实现基本的消息通信功能。

相关推荐
源码技术栈5 分钟前
智慧工地微服务架构+Java+Spring Cloud +Uni-App +MySql开发,在微信公众号、小程序、H5、移动端
java·ai·saas·智慧工地·智慧工地项目·可视化大屏·智慧工地系统
老华带你飞9 分钟前
健身房预约|基于springboot 健身房预约小程序系统(源码+数据库+文档)
java·数据库·vue.js·spring boot·后端·小程序
帅得不敢出门12 分钟前
MTK Android11 APP调用OTA升级
android·java·开发语言·framework
李拾叁的摸鱼日常16 分钟前
ThreadLocal 内存泄漏深度解析:原因、避坑指南与业务最佳实践
java·面试
Kiri霧17 分钟前
Go Defer语句详解
java·服务器·golang
Q_Q51100828518 分钟前
基于Java的加油站销售积分管理系统的设计与实
java·开发语言
亿.620 分钟前
2025鹏城杯 Web
java·安全·web·ctf·鹏城杯
⑩-22 分钟前
Java设计模式-命令模式
java·设计模式·命令模式
学Linux的语莫23 分钟前
开发的一些知识
java·开发语言
百锦再25 分钟前
与AI沟通的正确方式——AI提示词:原理、策略与精通之道
android·java·开发语言·人工智能·python·ui·uni-app