当前位置: 首页 > news >正文

【经验分享】SpringBoot集成WebSocket开发02 之 实现一个基本示例并Spring Bean注入的方式来组织代码

结合Spring Boot和WebSocket实现一个基本示例,并且使用Spring Bean注入的方式来组织代码。

1. 创建Spring Boot项目

首先,确保你有一个Spring Boot项目,并在pom.xml文件中引入了WebSocket相关的依赖。

<dependencies>
    <!-- Spring Boot WebSocket -->
    <dependency>
        <groupId>org.springframework.boot</groupId>
        <artifactId>spring-boot-starter-websocket</artifactId>
    </dependency>

    <!-- Spring Boot Starter Web for Rest Controllers -->
    <dependency>
        <groupId>org.springframework.boot</groupId>
        <artifactId>spring-boot-starter-web</artifactId>
    </dependency>

    <!-- Spring Boot Starter for Logging and other utilities -->
    <dependency>
        <groupId>org.springframework.boot</groupId>
        <artifactId>spring-boot-starter-logging</artifactId>
    </dependency>
</dependencies>

2. WebSocket 配置类

创建一个配置类,启用WebSocket支持,并且在这个类中配置一个TextWebSocketHandler来处理消息的传递。

import org.springframework.context.annotation.Configuration;
import org.springframework.web.socket.WebSocketHandler;
import org.springframework.web.socket.config.annotation.EnableWebSocket;
import org.springframework.web.socket.config.annotation.WebSocketConfigurer;
import org.springframework.web.socket.config.annotation.WebSocketHandlerRegistry;

@Configuration
@EnableWebSocket
public class WebSocketConfig implements WebSocketConfigurer {

    private final MyWebSocketHandler myWebSocketHandler;

    // 注入自定义的 WebSocketHandler
    public WebSocketConfig(MyWebSocketHandler myWebSocketHandler) {
        this.myWebSocketHandler = myWebSocketHandler;
    }

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

3. 创建自定义WebSocketHandler

MyWebSocketHandler 类继承自TextWebSocketHandler,用来处理WebSocket消息的接收和发送。我们将使用Spring的@Component注解让这个类成为一个Spring Bean,并通过构造器注入来引入服务逻辑。

import org.springframework.stereotype.Component;
import org.springframework.web.socket.WebSocketSession;
import org.springframework.web.socket.handler.TextWebSocketHandler;
import org.springframework.web.socket.TextMessage;

@Component
public class MyWebSocketHandler extends TextWebSocketHandler {

    private final MyService myService;

    // 构造器注入MyService
    public MyWebSocketHandler(MyService myService) {
        this.myService = myService;
    }

    @Override
    public void handleTextMessage(WebSocketSession session, TextMessage message) {
        // 通过MyService处理消息
        String response = myService.processMessage(message.getPayload());
        try {
            // 发送处理后的消息
            session.sendMessage(new TextMessage(response));
        } catch (Exception e) {
            e.printStackTrace();
        }
    }
}

4. 创建一个简单的Service

我们创建一个简单的Service类MyService,用来处理消息的业务逻辑。它会被注入到MyWebSocketHandler中。

import org.springframework.stereotype.Service;

@Service
public class MyService {

    public String processMessage(String message) {
        // 这里是消息处理的业务逻辑,可以根据实际需要修改
        return "处理后的消息: " + message;
    }
}

5. 创建Controller(可选)

如果你想通过HTTP请求来访问WebSocket服务,或者提供一个WebSocket客户端连接的页面,你可以创建一个简单的Controller。

import org.springframework.web.bind.annotation.GetMapping;
import org.springframework.web.bind.annotation.RestController;

@RestController
public class WebSocketController {

    @GetMapping("/ws")
    public String hello() {
        return "WebSocket 服务正在运行";
    }
}

6. 启动应用

创建Application类来启动Spring Boot应用:

import org.springframework.boot.SpringApplication;
import org.springframework.boot.autoconfigure.SpringBootApplication;

@SpringBootApplication
public class WebSocketApplication {
    public static void main(String[] args) {
        SpringApplication.run(WebSocketApplication.class, args);
    }
}

7. 测试WebSocket连接

使用WebSocket客户端(例如浏览器控制台、Postman、WebSocket客户端插件等)连接到ws://localhost:8080/ws,并发送一些消息。你应该能收到由MyService处理后的消息。

例如,发送消息"Hello WebSocket",应该会收到类似 "处理后的消息: Hello WebSocket" 的响应。


说明:

  • WebSocketConfig中,我们将MyWebSocketHandler注册为WebSocket处理器,并指定WebSocket的URL /ws
  • 通过构造器注入,MyWebSocketHandler可以访问Spring管理的MyService Bean,并在WebSocket连接中调用它处理消息。
  • MyService封装了消息的业务逻辑,保持了代码的清晰与解耦。

这个示例展示了Spring Boot与WebSocket的基本集成,同时也体现了如何使用Spring的依赖注入来组织代码。

相关文章:

  • 在浏览器中配置vue请求后端的接口地址
  • 剖析sentinel的限流和熔断
  • 虚幻基础:移动组件
  • x012-MSP430F249智能步进电动百叶窗_proteus_光敏电阻_步进电机_仿真
  • 在芯片器件制造中,一氧化氮气体什么会提升栅氧膜层的质量。
  • Ubuntu 优化 Vim 指南
  • 【GPT入门】第17课 RAG向量检索分类、原理与优化
  • InfluxDB写入测试
  • 贪心算法——c#
  • Ubuntu24.04下管理自己的ssh连接
  • 关于ISP Pipeline LSC(镜头阴影校正)位置的一些想法
  • Java 大视界 -- 基于 Java 的大数据实时流处理中的窗口操作与时间语义详解(135)
  • Elastic Stack 8.16.0 日志收集平台的搭建
  • Java 中的序列化和反序列化是什么?
  • IntelliJ IDEA 快捷键系列:重命名快捷键详解
  • Tailwindcss开启黑夜模式
  • 数据结构-----初始数据结构、及GDB调试
  • python爬虫Scrapy(6)之增量式
  • 2018年全国职业院校技能大赛高职组-计算机网络应用竞赛竞赛样题E卷
  • OpenGL
  • 河北疫情最新通告/广州seo网站推广
  • 灵山网站建设/营销策划书
  • 建设部网站监管平台/百度网站搜索排名
  • 做网站的挣钱么/seo怎么优化简述
  • 智慧团建登录入口官网/志鸿优化设计电子版
  • 禅城网站建设公司/网络推广服务