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

相关推荐
小鱼小鱼.oO6 分钟前
java后端学习经验分享(大三进大厂版)
java·经验分享·学习
Hooomeey7 分钟前
深度解析线程与线程池:从 OS 调度内核到 Java 并发架构的演进逻辑
java·后端·架构
狂奔小菜鸡7 分钟前
Day8 | Java 方法全解析
java·后端·java ee
Mos_x16 分钟前
服务器公网IP、私网IP、弹性IP是什么?区别与应
java·后端
落日漫游18 分钟前
ArgoCD与Helm:云原生部署对比解析
java·容器·kubernetes
Yeniden23 分钟前
【设计模式】享元模式(Flyweight)大白话讲解!
java·设计模式·享元模式
乙己40723 分钟前
设计模式——单例模式(singleton)
java·c++·单例模式·设计模式
豐儀麟阁贵44 分钟前
5.6对象
java·开发语言
格格步入1 小时前
🤔一次 OOM 排查(dump文件分析)
java·后端
蓝-萧1 小时前
Spring Security安全框架原理与实战
java·后端