Loading [MathJax]/jax/output/CommonHTML/config.js
前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >专栏 >SpringBoot快速搭建WebSocket服务端和客户端

SpringBoot快速搭建WebSocket服务端和客户端

作者头像
摘星.
发布于 2025-05-20 06:01:04
发布于 2025-05-20 06:01:04
19002
代码可运行
举报
文章被收录于专栏:博客专享博客专享
运行总次数:2
代码可运行

由于工作需要,研究了SpringBoot搭建WebSocket双向通信的过程,其他的教程看了许多,感觉讲得太复杂,很容易弄乱,这里我只展示快速搭建过程

SpringBoot-WebSocket

Server

引入SpringBoot集成WebSocket

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
<dependency>
  <groupId>org.springframework.boot</groupId>
  <artifactId>spring-boot-starter-websocket</artifactId>
</dependency>

配置WebSocketServerConfig

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
@Configuration
@EnableWebSocket
public class WebSocketServerConfig implements WebSocketConfigurer {
    @Bean
    public WebSocketHandler webSocketHandler() {
        return new WebSocketServerHandler();
    }

    @Override
    public void registerWebSocketHandlers(WebSocketHandlerRegistry registry) {
        registry
                .addHandler(webSocketHandler(), "/ws")//添加处理器并指定WebSocket的endpoint端点
                .setAllowedOrigins("*"); //允许跨域访问
    }
}

配置WebSocketServerHandler

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
@Slf4j
public class WebSocketServerHandler extends TextWebSocketHandler {

    /**
     * 处理连接后的逻辑
     * @param session:WebSocketSession域对象,有获取通信信息,发送消息,打开关闭通道等等功能
     */
    @Override
    public void afterConnectionEstablished(WebSocketSession session) throws Exception {
        log.info("Server: WebSocket connection established");
    }

    /**
     * 处理客户端发送的消息
     * @param session:WebSocketSession域对象,有获取通信信息,发送消息,打开关闭通道等等功能
     * @param message:客户端发送的文本消息
     */
    @Override
    protected void handleTextMessage(WebSocketSession session, TextMessage message) throws Exception {
        log.info("Server: Received message: " + message.getPayload());
        session.sendMessage(new TextMessage("Server: Hello, client!"));
    }
}

Client

引入SpringBoot集成WebSocket

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
<dependency>
  <groupId>org.springframework.boot</groupId>
  <artifactId>spring-boot-starter-websocket</artifactId>
</dependency>

配置WebSocketClientConfig

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
/**
 * WebSocket客户端配置
 * @author Lenovo
 * @date 2023/11/22
 */
@Configuration
@EnableScheduling
public class WebSocketClientConfig {
    @Bean
    public WebSocketClientHandler myWebSocketClientHandler() {
        return new WebSocketClientHandler();
    }
}

配置WebSocketClientHandler

代码语言:javascript
代码运行次数:2
运行
AI代码解释
复制
@Component
@Slf4j
@Data
@ConfigurationProperties(prefix = "websocket")
public class WebSocketClientHandler extends StandardWebSocketClient implements WebSocketHandler {
    private WebSocketSession session;
    private String url;

    /**
     * 连接WebSocket服务端
     */
//    @Scheduled(fixedDelay = 60000) // 每隔1分钟连接一次
    public void connect() throws Exception {
        WebSocketClient client = new StandardWebSocketClient();
        session = client.doHandshake(new WebSocketClientHandler(), url).get();
        log.info("Client: WebSocket connection established");
    }

    /**
     * 关闭WebSocket连接
     */
    @PreDestroy
    public void close() throws Exception {
        session.close();
    }

    /**
     * @param message:向服务端发送的消息
     */
    public void sendMessage(String message) throws Exception {
        session.sendMessage(new TextMessage(message));
    }

//    @Scheduled(fixedDelay = 5000)
//    public void sendMessage() throws Exception {
//        session.sendMessage(new TextMessage("message"));
//    }

    /**
     * 处理连接后的逻辑
     * @param session:WebSocketSession域对象,有获取通信信息,发送消息,打开关闭通道等等功能
     */
    @Override
    public void afterConnectionEstablished(WebSocketSession session) throws Exception {
        log.info("Client: WebSocket connection established");
    }
    /**
     * 处理客户端发送的消息
     * @param session:WebSocketSession域对象,有获取通信信息,发送消息,打开关闭通道等等功能
     * @param message:客户端发送的文本消息
     */
    @Override
    public void handleMessage(WebSocketSession session, WebSocketMessage<?> message) throws Exception {
        log.info("Client: Received message: " + message.getPayload());
        session.sendMessage(new TextMessage("Client: Hello, server!"));
    }

    /**
     * 处理发生的错误
     * @param session:WebSocketSession域对象,有获取通信信息,发送消息,打开关闭通道等等功能
     * @param exception:通信出现的异常
     */
    @Override
    public void handleTransportError(WebSocketSession session, Throwable exception) throws Exception {
        log.info("Client: Error Occurred: " + exception.getMessage());
    }

    /**
     * 连接关闭
     */
    @Override
    public void afterConnectionClosed(WebSocketSession session, CloseStatus closeStatus) throws Exception {
        log.info("Client: Connection Closed");
    }

    /**
     * 用于判断服务器或客户端是否支持分片消息partial message
     * WebSocket 协议规范要求所有的 WebSocket 实现都必须支持接收和处理完整的消息
     * @return boolean
     */
    @Override
    public boolean supportsPartialMessages() {
        return false;
    }
}

这样就完成了整个搭建过程

本文参与 腾讯云自媒体同步曝光计划,分享自作者个人站点/博客。
原始发表:2025-03-30,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 作者个人站点/博客 前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体同步曝光计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
暂无评论
推荐阅读
编辑精选文章
换一批
SpringBoot3-整合WebSocket
WebSocket 是一种网络通信协议,提供全双工通信通道,使服务器可以主动向客户端推送数据。与传统的 HTTP 请求-响应模式不同,WebSocket 在建立连接后,允许服务器和客户端之间进行双向实时通信。
CoderJia
2024/12/16
3950
SpringBoot3-整合WebSocket
SpringBoot整合WebSocket实战演练
本文将介绍如何在Spring Boot应用程序中使用WebSocket实现服务端向客户端推送消息。Spring Boot和WebSocket的整合实现服务端向客户端推送消息,使得客户端能够实时接收并处理服务器发来的信息。WebSocket协议是一种双向通信的网络协议,使得客户端和服务器能够建立持久连接,实现实时交互。通过WebSocket,客户端可以实时接收服务器推送的消息,并立即做出响应,而不需要等待服务器处理请求。这种实时的交互方式在Web应用中非常有用,特别是在需要实时更新用户界面、处理用户输入的场景中。
小明爱吃火锅
2023/10/19
1.7K1
SpringBoot整合WebSocket实战演练
spring websocket推送
spring websocket使用,在spring官网上已有相应的demo,这里主要描述推送到对应的浏览器客户端 基本的拦截配置处理 @Component public class MessageHandshakeInterceptor implements HandshakeInterceptor { public boolean beforeHandshake(ServerHttpRequest request, ServerHttpResponse response, WebSocketH
用户1418372
2018/09/13
1.5K0
springboot整合篇-springboot整合websocket
ServerEndpoint的实现主要针对业务领域对websocket消息进行处理,主要使用@OnOpen对websocket连接建立时需要实现的逻辑,@OnClose对websocket连接关闭时需要实现的逻辑,@OnMessage对websocket收到消息时的处理以及@OnError对websocket发生错误时的处理方式。
Java开发者之家
2021/06/17
2K0
实现websocket的两种方式
1.两种方式,一种使用tomcat的websocket实现,一种使用spring的websocket
凯哥Java
2019/06/28
2K0
spring-websocket实现聊天室功能
最近看到有些人的博客中有聊天室的功能所以我也在我博客中写了一个,不过他们用的是java原生的,这里我使用了spring封装的spring-websocket
用户10136162
2022/11/15
8200
spring-websocket实现聊天室功能
【面试题精讲】什么是websocket?如何与前端通信?
WebSocket是一种在Web应用程序中实现双向通信的协议。它允许在客户端和服务器之间建立持久的、全双工的连接,以便实时地发送数据。
程序员朱永胜
2023/09/06
8970
Spring消息之WebSocket
一、WebSocket简介     WebSocket 的定义?WebSocket是HTML5下一种全双工通信协议。在建立连接后,WebSocket服务器端和客户端都能主动的向对方发送和接收数据,就像Socket一样。     WebSocket 的由来?众所周知,HTTP协议有“无连接”、“不可靠”、“尽最大努力”的特点。WebSocket的出现可以看成是HTTP协议为了支持长连接所打的一个大补丁。首先,由 IETF 制定发布了WebSocket 协议。后来,HTML5为了在Web端支持WebSocket
JMCui
2018/06/14
1.1K0
【websocket】spring boot 集成 websocket 的四种方式
这个配置类很简单,通过这个配置 spring boot 才能去扫描后面的关于 websocket 的注解
猿天地
2019/10/31
44.4K2
SpringBoot入门建站全系列(二十七)WebSocket做简单的聊天室
WebSocket 是 HTML5 开始提供的一种在单个 TCP 连接上进行全双工通讯的协议。
品茗IT
2020/05/28
1.1K0
传统@ServerEndpoint方式开发WebSocket应用和SpringBoot构建WebSocket应用程序
通过websocket的两种使用方式,让你更加深入理解用法。很多人不懂websocket怎么辨别是谁发送过来的,文中说到实现WebSocketConfigurer接口,定义拦截器可以绑定用户信息,还有其他很多,细细品,对比看比较好!
java思维导图
2020/05/20
9.5K0
《Spring实战》摘录 - 27
Q: #17.3.3-1 | RabbitMQ连接工厂的作用是创建到RabbitMQ的连接
用户1335799
2019/08/15
4350
Spring整合WebSocket
WebSocket,干什么用的?我们有了HTTP,为什么还要用WebSocket?很多同学都会有这样的疑问。我们先来看一个场景,大家的手机里都有微信,在微信中,只要有新的消息,这个联系人的前面就会有一个红点,这个需求要怎么实现呢?大家思考3秒钟。哈哈,最简单,最笨的方法就行客户端轮询,在微信的客户端每隔一段时间(比如:1s或者2s),向服务端发送一个请求,查询是否有新的消息,如果有消息就显示红点。这种方法是不是太笨了呢?每次都要客户端去发起请求,难道就不能从服务端发起请求吗?这样客户端不就省事了吗。再看看股票软件,每个股票的当前价格都是实时的,这我们怎么做,每个一秒请求后台查询当前股票的价格吗?这样效率也太低了吧,而且时效性也很低。这就需要我们今天的主角WebSocket去实现了。
小忽悠
2020/08/31
7900
Spring整合WebSocket
十一. websocker服务与ws请求头拦截器
这两个月有点累,我就不做代码解释了。直接上代码!另外这篇文章代码有一些待优化的地方,如下 服务逻辑类的switch块待改成反射 房主退出连接应该将房间权限赋给其他人 ws配置 WebSocketConfigurer.java package cc.tanblog.online.config; import cc.tanblog.online.socket.MyWebSocketHandler; import org.springframework.context.annotation.Bean
用户8988577
2022/12/27
1.1K0
[网页五子棋][匹配模块]服务器开发、用户管理器(创建匹配请求/响应对象、处理连接成功、处理下线)
创建 api.MatchAPI,继承自 TextWebSocketHandler 作为处理 WebSocket 请求的入口类
椰椰椰耶
2025/05/29
650
【Spring源码】WebSocket做推送动作的底层实例
官方文档表面心跳采用了SckJS协议,所以我们应该从图2里的sockjs模块开始探索。
JavaSouth南哥
2024/03/29
2300
【Spring源码】WebSocket做推送动作的底层实例
Spring和WebSocket整合详解(建立Web聊天室)
WebSocket 是 HTML5 开始提供的一种在单个 TCP 连接上进行全双工通讯的协议。
品茗IT
2019/09/12
5.1K0
springboot+websocket实现服务端、客户端
小编最近一直在使用springboot框架开发项目,毕竟现在很多公司都在采用此框架,之后小编也会陆续写关于springboot开发常用功能的文章。
全栈程序员站长
2022/09/15
3.7K0
springboot+websocket实现服务端、客户端
实战 | spring boot 集成 websocket 的四种方式
这个配置类很简单,通过这个配置 spring boot 才能去扫描后面的关于 websocket 的注解
Bug开发工程师
2020/03/12
2K0
结合WebSocket和Openlayers4实现地图内容的刷新
本文讲述如何结合WebSocket和Openlayers4实现地图内容的实时刷新。
牛老师讲GIS
2018/10/23
9510
结合WebSocket和Openlayers4实现地图内容的刷新
推荐阅读
相关推荐
SpringBoot3-整合WebSocket
更多 >
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档