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

相关推荐
h***59338 分钟前
SpringBoot中如何手动开启事务
java·spring boot·spring
q_19132846959 分钟前
基于SpringBoot2+Vue2的宠物健康医疗论坛系统
vue.js·spring boot·mysql·健康医疗·宠物·计算机毕业设计
yuuki23323317 分钟前
【C语言&数据结构】二叉树的链式递归
c语言·数据结构·后端
L.EscaRC26 分钟前
深入解析SpringBoot中的循环依赖机制与解决方案
java·spring boot·spring·循环依赖
IT_陈寒34 分钟前
Spring Boot 3.2 性能翻倍秘诀:这5个配置优化让你的应用起飞🚀
前端·人工智能·后端
q***48411 小时前
SpringBoot整合easy-es
spring boot·后端·elasticsearch
Victor3561 小时前
Redis(141)Redis的Cluster的槽分配是如何实现的?
后端
Victor3561 小时前
Redis(140)Redis的Cluster的故障转移是如何实现的?
后端
一 乐2 小时前
健身达人小程序|基于java+vue健身达人小程序的系统设计与实现(源码+数据库+文档)
java·前端·数据库·vue.js·spring boot·小程序
倚肆2 小时前
Spring Boot 中的 Bean 与自动装配详解
spring boot·后端·python