SpringBoot实现WebSocket服务端

WebSocket 可以让你实现 实时通信 ,比普通 HTTP 接口更炫也更"活"。今天讲一个 Spring Boot + Java 的实现思路 。


1️⃣ 添加依赖

Maven:

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

2️⃣ 创建 WebSocket 配置

Java 版本:

复制代码
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;

@Configuration
@EnableWebSocket
public class WebSocketConfig implements WebSocketConfigurer {

    private final MyWebSocketHandler handler;

    public WebSocketConfig(MyWebSocketHandler handler) {
        this.handler = handler;
    }

    @Override
    public void registerWebSocketHandlers(WebSocketHandlerRegistry registry) {
        registry.addHandler(handler, "/ws").setAllowedOrigins("*");
    }
}
  • /ws 就是前端连接的 WebSocket 地址

  • setAllowedOrigins("*") 可以解决跨域问题(开发阶段)


3️⃣ 创建 WebSocket 处理器

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

import java.util.Collections;
import java.util.HashSet;
import java.util.Set;

@Component
public class MyWebSocketHandler extends TextWebSocketHandler {

    private final Set<WebSocketSession> sessions = Collections.synchronizedSet(new HashSet<>());

    @Override
    public void afterConnectionEstablished(WebSocketSession session) {
        sessions.add(session);
        System.out.println("新连接: " + session.getId());
    }

    @Override
    protected void handleTextMessage(WebSocketSession session, TextMessage message) throws Exception {
        System.out.println("收到消息: " + message.getPayload());

        // 广播给所有连接
        synchronized (sessions) {
            for (WebSocketSession s : sessions) {
                if (s.isOpen()) {
                    s.sendMessage(new TextMessage("收到消息: " + message.getPayload()));
                }
            }
        }
    }

    @Override
    public void afterConnectionClosed(WebSocketSession session, CloseStatus status) {
        sessions.remove(session);
        System.out.println("连接关闭: " + session.getId());
    }
}

4️⃣ postman测试

ws://localhost:8081/ws

相关推荐
canonical_entropy13 分钟前
Nop入门:增加DSL模型解析器
spring boot·后端·架构
渣娃-小晴晴35 分钟前
java集合在并发环境下应用时的注意事项
java·后端
Jaising6661 小时前
PF4J 日志类冲突与 JVM 类加载机制
jvm·后端
Undoom2 小时前
智能开发环境下的 Diagram-as-Code 实践:MCP Mermaid 技术链路拆解
后端
计算机毕设VX:Fegn08952 小时前
计算机毕业设计|基于springboot + vue图书借阅管理系统(源码+数据库+文档)
数据库·vue.js·spring boot·后端·课程设计
疯狂的程序猴2 小时前
IPA 深度混淆是什么意思?分析其与普通混淆的区别
后端
cci2 小时前
Remote ssh无法连接?
后端
JohnYan2 小时前
Bun技术评估 - 22 Stream
javascript·后端·bun
okseekw2 小时前
Maven从入门到实战:核心概念+配置详解+避坑指南
java·后端
该用户已不存在2 小时前
Node.js后端开发必不可少的7个核心库
javascript·后端·node.js