首页 > 其他分享 >在Spring Boot中实现WebSocket实时通信

在Spring Boot中实现WebSocket实时通信

时间:2024-07-20 15:54:13浏览次数:8  
标签:web WebSocket Spring Boot springframework org

在Spring Boot中实现WebSocket实时通信

大家好,我是微赚淘客系统3.0的小编,是个冬天不穿秋裤,天冷也要风度的程序猿!

在现代 web 应用中,实时通信功能越来越受到重视。WebSocket 协议是一种在单个 TCP 连接上进行全双工通信的协议,允许客户端和服务器之间进行实时数据传输。Spring Boot 提供了对 WebSocket 的良好支持,使得实现实时通信变得非常简单。本文将介绍如何在 Spring Boot 中实现 WebSocket 实时通信,包括服务器端和客户端的实现。

1. 创建 Spring Boot 项目

首先,确保你已经创建了一个 Spring Boot 项目。你可以使用 Spring Initializr 生成一个包含 Web 依赖项的项目。

2. 添加依赖

pom.xml 文件中,添加 spring-boot-starter-websocket 依赖来支持 WebSocket:

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

3. 配置 WebSocket

在 Spring Boot 中,你需要创建一个 WebSocket 配置类来注册 WebSocket 端点。下面是一个示例:

package cn.juwatech.websocket.config;

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 {

    @Override
    public void registerWebSocketHandlers(WebSocketHandlerRegistry registry) {
        registry.addHandler(new MyWebSocketHandler(), "/websocket").setAllowedOrigins("*");
    }
}

在这个配置类中,MyWebSocketHandler 是我们将要实现的 WebSocket 处理器类,/websocket 是 WebSocket 端点的路径。

4. 实现 WebSocket 处理器

接下来,创建一个 WebSocket 处理器类,该类实现 WebSocketHandler 接口:

package cn.juwatech.websocket.handler;

import org.springframework.web.socket.WebSocketSession;
import org.springframework.web.socket.handler.TextWebSocketHandler;
import org.springframework.web.socket.TextMessage;
import org.springframework.web.socket.WebSocketMessage;

public class MyWebSocketHandler extends TextWebSocketHandler {

    @Override
    public void handleTextMessage(WebSocketSession session, TextMessage message) throws Exception {
        System.out.println("Received message: " + message.getPayload());
        session.sendMessage(new TextMessage("Message received: " + message.getPayload()));
    }

    @Override
    public void afterConnectionEstablished(WebSocketSession session) throws Exception {
        System.out.println("WebSocket connection established");
    }

    @Override
    public void afterConnectionClosed(WebSocketSession session, CloseStatus status) throws Exception {
        System.out.println("WebSocket connection closed");
    }
}

在这个处理器中,我们处理接收到的文本消息,并向客户端发送确认消息。

5. 创建 WebSocket 客户端

在前端,我们可以使用 JavaScript 创建一个 WebSocket 客户端来连接到服务器并发送消息:

<!DOCTYPE html>
<html>
<head>
    <title>WebSocket Client</title>
    <script type="text/javascript">
        document.addEventListener("DOMContentLoaded", function() {
            var ws = new WebSocket("ws://localhost:8080/websocket");

            ws.onopen = function() {
                console.log("WebSocket connection opened");
                ws.send("Hello, WebSocket!");
            };

            ws.onmessage = function(event) {
                console.log("Received message: " + event.data);
            };

            ws.onclose = function() {
                console.log("WebSocket connection closed");
            };
        });
    </script>
</head>
<body>
    <h1>WebSocket Client</h1>
</body>
</html>

这个简单的 HTML 页面创建了一个 WebSocket 连接,并在打开连接后发送一条消息。它还处理来自服务器的消息并在控制台中输出。

6. 测试

启动 Spring Boot 应用程序,并在浏览器中打开 HTML 页面。你应该能够看到 WebSocket 连接的建立、消息的发送和接收。控制台中也会输出相应的日志信息。

7. 高级功能

  • 广播消息:可以通过维护 WebSocket 会话列表,在处理器中向所有会话发送广播消息。
  • 用户身份验证:可以使用 Spring Security 配合 WebSocket 进行用户身份验证。
  • Ping/Pong:可以实现心跳检测来确保连接的健康状态。

8. 结论

通过以上步骤,你可以在 Spring Boot 应用中轻松实现 WebSocket 实时通信。无论是构建聊天应用、实时通知系统,还是其他需要实时数据传输的应用,WebSocket 都是一个强大的工具。Spring Boot 的 WebSocket 支持让这一过程变得简单而高效。

本文著作权归聚娃科技微赚淘客系统开发者团队,转载请注明出处!

标签:web,WebSocket,Spring,Boot,springframework,org
From: https://www.cnblogs.com/szk123456/p/18313207

相关文章

  • 使用Java和Spring MVC构建Web应用
    使用Java和SpringMVC构建Web应用大家好,我是微赚淘客系统3.0的小编,是个冬天不穿秋裤,天冷也要风度的程序猿!在现代企业中,Web应用程序是最常见的应用类型之一。SpringMVC是一个强大且流行的JavaWeb框架,用于构建功能强大且易于维护的Web应用程序。本文将通过实际示例展示如......
  • Spring Boot+WebSocket向前端推送消息
     ​ 博客主页:   南来_北往......
  • Springboot 启动时Bean的创建与注入(二)-面试热点-springboot源码解读-xunznux
    Springboot启动时Bean的创建与注入,以及对应的源码解读文章目录Springboot启动时Bean的创建与注入,以及对应的源码解读11、getBean:200,AbstractBeanFactory(org.springframework.beans.factory.support)12、doGetBean:335,AbstractBeanFactory(org.springframework......
  • java项目(knife4j使用,静态资源未放在static资源包下,公共字段自动填充,Spring Cache与Spr
    Knife4j(生成接口文档)使用swagger你只需要按照它的规范去定义接口及接口相关的信息,就可以做到生成接口文档,以及在线接口调试页面。官网:https://swagger.io/Knife4j是为JavaMVC框架集成Swagger生成Api文档的增强解决方案。使用方式1、导入knife4j的maven坐标<dependency>......
  • 观察者模式实战:Spring Boot中联动更新机制的优雅实现
    引言在许多应用系统中,我们经常需要处理多个表之间的关联更新问题。例如,在教育管理系统中,当学生的基本信息表中的年龄字段发生更改时,我们可能还需要同步更新学生档案表和学生成绩表中的相关信息。本文将通过一个具体的案例,介绍如何在SpringBoot项目中利用观察者模式来优雅地解......
  • Spring cloud 安全部署与性能优化
    Mr.NeoChen(陈景峯),netkiller,BG7NYT节选自《NetkillerSpringCloud手札》多维度架构-知乎​www.zhihu.com/club/1241768772601950208​编辑1.环境安装1.1.操作系统初始化操作系统按完成后,使用下面脚本做一次初始化curl-shttps://raw.githubusercontent.co......
  • SpringBoot+Vue的闲一品零食交易平台(前后端分离)
    技术栈JavaSpringBootMavenMySQLmybatisVueShiroElement-UI角色对应功能网站用户管理员项目功能截图......
  • SpringBoot+Vue的进存销管理系统(前后端分离)
    技术栈JavaSpringBootMavenMySQLmybatisVueShiroElement-UI角色对应功能管理员员工项目功能截图......
  • 基于Java Springboot餐厅点餐系统
    作者介绍:✌全网粉丝10W+本平台特邀作者、博客专家、CSDN新星计划导师、软件领域优质创作者,博客之星、掘金/华为云/阿里云/InfoQ等平台优质作者、专注于项目实战✌一、作品包含源码+数据库+设计文档万字+全套环境和工具资源+部署教程二、项目技术前端技术:Html、Css......
  • 基于Java Springboot宠物管理系统
    作者介绍:✌全网粉丝10W+本平台特邀作者、博客专家、CSDN新星计划导师、软件领域优质创作者,博客之星、掘金/华为云/阿里云/InfoQ等平台优质作者、专注于项目实战✌一、作品包含源码+数据库+设计文档万字+全套环境和工具资源+部署教程二、项目技术前端技术:Html、Css......