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

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

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

SpringBoot-WebSocket

Server

引入SpringBoot集成WebSocket

<dependency>
  <groupId>org.springframework.boot</groupId>
  <artifactId>spring-boot-starter-websocket</artifactId>
</dependency>

image.gif

配置WebSocketServerConfig

@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("*"); //允许跨域访问
    }
}

image.gif

配置WebSocketServerHandler

@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!"));
    }
}

image.gif

Client

引入SpringBoot集成WebSocket

<dependency>
  <groupId>org.springframework.boot</groupId>
  <artifactId>spring-boot-starter-websocket</artifactId>
</dependency>

image.gif

配置WebSocketClientConfig

/**
 * WebSocket客户端配置
 * @author Lenovo
 * @date 2023/11/22
 */
@Configuration
@EnableScheduling
public class WebSocketClientConfig {
    @Bean
    public WebSocketClientHandler myWebSocketClientHandler() {
        return new WebSocketClientHandler();
    }
}

image.gif

配置WebSocketClientHandler

@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;
    }
}

image.gif

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

目录
相关文章
|
27天前
|
网络协议 Java
SpringBoot快速搭建TCP服务端和客户端
由于工作需要,研究了SpringBoot搭建TCP通信的过程,对于工程需要的小伙伴,只是想快速搭建一个可用的服务.其他的教程看了许多,感觉讲得太复杂,很容易弄乱,这里我只讲效率,展示快速搭建过程。
117 58
|
4月前
|
消息中间件 XML 前端开发
springBoot集成websocket实时消息推送
本文介绍了如何在Spring Boot项目中集成WebSocket实现实时消息推送。首先,通过引入`spring-boot-starter-websocket`依赖,配置`WebSocketConfig`类来启用WebSocket支持。接着,创建`WebSocketTest`服务器类,处理连接、消息收发及错误等事件,并使用`ConcurrentHashMap`管理用户连接。最后,前端通过JavaScript建立WebSocket连接,监听消息并进行相应处理。此方案适用于需要实时通信的应用场景,如聊天室、通知系统等。
236 2
|
8月前
|
JavaScript 前端开发 测试技术
前端全栈之路Deno篇(五):如何快速创建 WebSocket 服务端应用 + 客户端应用 - 可能是2025最佳的Websocket全栈实时应用框架
本文介绍了如何使用Deno 2.0快速构建WebSocket全栈应用,包括服务端和客户端的创建。通过一个简单的代码示例,展示了Deno在WebSocket实现中的便捷与强大,无需额外依赖,即可轻松搭建具备基本功能的WebSocket应用。Deno 2.0被认为是最佳的WebSocket全栈应用JS运行时,适合全栈开发者学习和使用。
368 7
|
11月前
|
前端开发 网络协议 JavaScript
在Spring Boot中实现基于WebSocket的实时通信
在Spring Boot中实现基于WebSocket的实时通信
|
8月前
|
开发框架 前端开发 网络协议
Spring Boot结合Netty和WebSocket,实现后台向前端实时推送信息
【10月更文挑战第18天】 在现代互联网应用中,实时通信变得越来越重要。WebSocket作为一种在单个TCP连接上进行全双工通信的协议,为客户端和服务器之间的实时数据传输提供了一种高效的解决方案。Netty作为一个高性能、事件驱动的NIO框架,它基于Java NIO实现了异步和事件驱动的网络应用程序。Spring Boot是一个基于Spring框架的微服务开发框架,它提供了许多开箱即用的功能和简化配置的机制。本文将详细介绍如何使用Spring Boot集成Netty和WebSocket,实现后台向前端推送信息的功能。
1885 1
|
8月前
|
前端开发 Java C++
RSocket vs WebSocket:Spring Boot 3.3 中的两大实时通信利器
本文介绍了在 Spring Boot 3.3 中使用 RSocket 和 WebSocket 实现实时通信的方法。RSocket 是一种高效的网络通信协议,支持多种通信模式,适用于微服务和流式数据传输。WebSocket 则是一种标准协议,支持全双工通信,适合实时数据更新场景。文章通过一个完整的示例,展示了如何配置项目、实现前后端交互和消息传递,并提供了详细的代码示例。通过这些技术,可以大幅提升系统的响应速度和处理效率。
|
10月前
|
开发框架 网络协议 Java
SpringBoot WebSocket大揭秘:实时通信、高效协作,一文让你彻底解锁!
【8月更文挑战第25天】本文介绍如何在SpringBoot项目中集成WebSocket以实现客户端与服务端的实时通信。首先概述了WebSocket的基本原理及其优势,接着详细阐述了集成步骤:添加依赖、配置WebSocket、定义WebSocket接口及进行测试。通过示例代码展示了整个过程,旨在帮助开发者更好地理解和应用这一技术。
606 1
|
10月前
|
小程序 Java API
springboot 微信小程序整合websocket,实现发送提醒消息
springboot 微信小程序整合websocket,实现发送提醒消息
|
10月前
|
JavaScript 前端开发 网络协议
WebSocket在Java Spring Boot+Vue框架中实现消息推送功能
在现代Web应用中,实时消息提醒是一项非常重要的功能,能够极大地提升用户体验。WebSocket作为一种在单个TCP连接上进行全双工通信的协议,为实现实时消息提醒提供了高效且低延迟的解决方案。本文将详细介绍如何在Java Spring Boot后端和Vue前端框架中利用WebSocket实现消息提醒功能。
481 0
|
12月前
|
前端开发 JavaScript 安全
集成WebSocket在Spring Boot中可以用于实现实时的双向通信
集成WebSocket在Spring Boot中可以用于实现实时的双向通信
177 4