当前位置: 首页 > news >正文

Spring Boot WebSocket 客户端

介绍

WebSocket 是一种在单个 TCP 连接上进行全双工通信的协议,它可以提供实时的、双向的数据传输。Spring Boot 提供了对 WebSocket 的支持,我们可以使用 Spring Boot WebSocket 客户端来连接到 WebSocket 服务器,并进行实时通信。

本文将介绍如何使用 Spring Boot WebSocket 客户端来连接到 WebSocket 服务器,并发送和接收消息。我们将通过一个简单的聊天应用案例来演示 Spring Boot WebSocket 客户端的使用。

创建 Spring Boot 项目

首先,我们需要创建一个 Spring Boot 项目。可以使用 Spring Initializr(https://start.spring.io/)来快速创建一个空的 Spring Boot 项目。

在创建项目时,需要添加以下依赖:

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

这些依赖将引入 Spring Boot WebSocket 和 Web 相关的功能。

创建 WebSocket 客户端

接下来,我们需要创建一个 WebSocket 客户端来连接到 WebSocket 服务器。可以创建一个 WebSocketClient 的实例,并使用 WebSocketClient 来连接到 WebSocket 服务器。

@Configuration
@EnableWebSocket
public class WebSocketClientConfig {@Beanpublic WebSocketClient webSocketClient() {return new StandardWebSocketClient();}@Beanpublic WebSocketHandler webSocketHandler() {return new MyWebSocketHandler();}
}

在上面的示例中,我们使用了 StandardWebSocketClient 作为 WebSocket 客户端的实现。可以根据需求选择其他的 WebSocket 客户端实现。

接下来,我们需要创建一个 WebSocket 处理器(WebSocketHandler)来处理 WebSocket 事件。可以实现 WebSocketHandler 接口,并重写其中的方法。

public class MyWebSocketHandler implements WebSocketHandler {@Overridepublic void afterConnectionEstablished(WebSocketSession session) throws Exception {// 连接建立后的处理逻辑}@Overridepublic void handleMessage(WebSocketSession session, WebSocketMessage<?> message) throws Exception {// 接收到消息的处理逻辑}@Overridepublic void handleTransportError(WebSocketSession session, Throwable exception) throws Exception {// 发生传输错误的处理逻辑}@Overridepublic void afterConnectionClosed(WebSocketSession session, CloseStatus closeStatus) throws Exception {// 连接关闭后的处理逻辑}@Overridepublic boolean supportsPartialMessages() {return false;}
}

在上面的示例中,我们实现了 WebSocketHandler 接口,并重写了其中的方法。afterConnectionEstablished 方法在 WebSocket 连接建立后被调用,handleMessage 方法在接收到消息时被调用,handleTransportError 方法在发生传输错误时被调用,afterConnectionClosed 方法在连接关闭后被调用。supportsPartialMessages 方法用于指示是否支持部分消息的处理。

连接到 WebSocket 服务器

在上面的示例中,我们已经定义了 WebSocket 客户端和 WebSocket 处理器。现在,我们需要创建一个类来连接到 WebSocket 服务器,并发送和接收消息。

@Component
public class WebSocketClientService {private final WebSocketClient webSocketClient;private final WebSocketHandler webSocketHandler;@Autowiredpublic WebSocketClientService(WebSocketClient webSocketClient, WebSocketHandler webSocketHandler) {this.webSocketClient = webSocketClient;this.webSocketHandler = webSocketHandler;}public void connect() {try {WebSocketSession session = webSocketClient.doHandshake(webSocketHandler, "ws://localhost:8080/ws").get();// 连接建立后的逻辑} catch (Exception e) {e.printStackTrace();}}public void sendMessage(String message) {// 发送消息的逻辑}public void disconnect() {// 断开连接的逻辑}
}

在上面的示例中,我们使用 WebSocketClientWebSocketHandler 的实例来连接到 WebSocket 服务器,并发送和接收消息。在 connect 方法中,我们调用 doHandshake 方法来建立 WebSocket 连接。在 sendMessage 方法中,我们可以调用 session.sendMessage 方法来发送消息。在 disconnect 方法中,我们可以调用 session.close 方法来断开连接。

使用 WebSocket 客户端

在上面的示例中,我们已经创建了一个 WebSocket 客户端,并定义了连接、发送和接收消息的方法。现在,我们可以在任何需要使用 WebSocket 客户端的地方注入 WebSocketClientService 并调用其方法来连接、发送和接收消息。

@Controller
public class HomeController {private final WebSocketClientService webSocketClientService;@Autowiredpublic HomeController(WebSocketClientService webSocketClientService) {this.webSocketClientService = webSocketClientService;}@GetMapping("/")public String home() {webSocketClientService.connect();return "home";}@PostMapping("/send")public String sendMessage(@RequestParam String message) {webSocketClientService.sendMessage(message);return "home";}@PostMapping("/disconnect")public String disconnect() {webSocketClientService.disconnect();return "home";}
}

在上面的示例中,我们定义了一个控制器(HomeController),并注入了 WebSocketClientService。在 home 方法中,我们调用 webSocketClientService.connect 方法来连接到 WebSocket 服务器。在 sendMessage 方法中,我们调用 webSocketClientService.sendMessage 方法来发送消息。在 disconnect 方法中,我们调用 webSocketClientService.disconnect 方法来断开连接。

测试 WebSocket 客户端

在上面的示例中,我们已经创建了一个 WebSocket 客户端,并定义了连接、发送和接收消息的方法。现在,我们可以运行项目并使用浏览器来测试 WebSocket 客户端。

  1. 启动 Spring Boot 项目。
  2. 在浏览器中访问 http://localhost:8080/
  3. 在页面上填写要发送的消息并点击发送按钮。
  4. 在控制台中可以看到 WebSocket 客户端接收到的消息。

案例

以下是三个使用 Spring Boot WebSocket 客户端的案例。

案例一:实时股票行情
假设我们需要实时获取股票行情数据,并在前端展示。我们可以使用 Spring Boot WebSocket 客户端来连接到股票行情 WebSocket 服务器,并定时发送请求,获取最新的股票行情数据。

在 WebSocket 处理器中,我们可以实现 afterConnectionEstablished 方法来发送请求,实现定时获取股票行情数据的逻辑。在 handleMessage 方法中,我们可以处理收到的股票行情数据,例如将其发送给前端页面进行展示。

案例二:实时多人游戏
假设我们正在开发一个实时多人游戏,需要在多个玩家之间进行实时通信。我们可以使用 Spring Boot WebSocket 客户端来连接到游戏服务器,并发送和接收游戏相关的消息。

在 WebSocket 处理器中,我们可以实现 afterConnectionEstablished 方法来发送玩家加入游戏的请求,实现玩家加入游戏的逻辑。在 handleMessage 方法中,我们可以处理接收到的游戏相关的消息,例如更新玩家位置、处理游戏事件等。

案例三:实时聊天应用
假设我们正在开发一个实时聊天应用,需要实现多个用户之间的实时通信。我们可以使用 Spring Boot WebSocket 客户端来连接到聊天服务器,并发送和接收聊天消息。

在 WebSocket 处理器中,我们可以实现 afterConnectionEstablished 方法来发送用户加入聊天室的请求,实现用户加入聊天室的逻辑。在 handleMessage 方法中,我们可以处理接收到的聊天消息,例如将其发送给其他在线用户进行实时聊天。

这些案例只是示例,实际应用中可能还有其他的业务逻辑和需求。使用 Spring Boot WebSocket 客户端,我们可以方便地连接到 WebSocket 服务器,并进行实时通信,满足各种实时应用的需求。

总结

本文介绍了如何使用 Spring Boot WebSocket 客户端来连接到 WebSocket 服务器,并发送和接收消息。我们通过一个简单的聊天应用案例演示了 Spring Boot WebSocket 客户端的使用。通过注入 WebSocketClientWebSocketHandler 的实例,我们可以在任何需要使用 WebSocket 客户端的地方连接到 WebSocket 服务器,并进行实时通信。希望本文对你在使用 Spring Boot WebSocket 客户端时有所帮助。

相关文章:

Spring Boot WebSocket 客户端

介绍 WebSocket 是一种在单个 TCP 连接上进行全双工通信的协议&#xff0c;它可以提供实时的、双向的数据传输。Spring Boot 提供了对 WebSocket 的支持&#xff0c;我们可以使用 Spring Boot WebSocket 客户端来连接到 WebSocket 服务器&#xff0c;并进行实时通信。 本文将…...

第五题-kotori和素因子【第六届传智杯程序设计挑战赛解题分析详解复盘】(JavaPythonC++实现)

🚀 欢迎来到 ACM 算法题库专栏 🚀 在ACM算法题库专栏,热情推崇算法之美,精心整理了各类比赛题目的详细解法,包括但不限于ICPC、CCPC、蓝桥杯、LeetCode周赛、传智杯等等。无论您是刚刚踏入算法领域,还是经验丰富的竞赛选手,这里都是提升技能和知识的理想之地。 ✨ 经典…...

【服务器能干什么】二十分钟搭建一个属于自己的 RSS 服务

如果大家不想自己捣鼓,只是想尝尝鲜,可以在下面留言,我后台帮大家开几个账号玩一玩。 哔哩哔哩【高清版本可以点击去吐槽到 B 站观看】:【VPS服务器到底能干啥】信息爆炸的年代,如何甄别出优质的内容?你可能需要自建一个RSS服务!_哔哩哔哩_bilibili 前言 RSS 服务 市…...

热门免费api接口:含核验API,物流api,短信api,天气api。。。

热门免费api接口&#xff1a;含核验API,物流api,短信api,天气api。。。 银行卡二要素&#xff1a;检测输入的姓名、银行卡号是否一致。毫秒级响应、直联保障&#xff0c;支持全国所有银联卡。银行卡三要素&#xff1a;检测输入的姓名、身份证号码、银行卡号是否一致。毫秒级响…...

基于AC6969的蓝牙控制RGB彩灯

程序的实现思路&#xff1a;单片机与手机app之间通过蓝牙实现通讯&#xff0c;通过点击屏幕上的对应色块然后app会把对应的RGB值发送到单片机。然后单片机会对数据进行解析然后把数字量转换为模拟量&#xff0c;然后通过PWM控制IO口输出不同的电压以此来达到控制RGB灯 RGB彩灯原…...

【C++高阶(五)】哈希思想--哈希表哈希桶

&#x1f493;博主CSDN主页:杭电码农-NEO&#x1f493;   ⏩专栏分类:C从入门到精通⏪   &#x1f69a;代码仓库:NEO的学习日记&#x1f69a;   &#x1f339;关注我&#x1faf5;带你学习C   &#x1f51d;&#x1f51d; 哈希结构 1. 前言2. unordered系列容器3. 哈希概…...

45、Flink 的指标体系介绍及验证(1)-指标类型及指标实现示例

Flink 系列文章 1、Flink 部署、概念介绍、source、transformation、sink使用示例、四大基石介绍和示例等系列综合文章链接 13、Flink 的table api与sql的基本概念、通用api介绍及入门示例 14、Flink 的table api与sql之数据类型: 内置数据类型以及它们的属性 15、Flink 的ta…...

SAP创建ODATA服务-Structure

SAP创建ODATA服务-Structure 1、创建数据字典 进入se11创建透明表ZRICO_USR,并创建对应字段 2、创建OData service 首先创建Gateway service project&#xff0c;事务码&#xff1a;SEGW&#xff0c;点击Create Project 按钮 Gateway service Project分四个部分&#xff1a…...

【开源】基于JAVA的车险自助理赔系统

项目编号&#xff1a; S 018 &#xff0c;文末获取源码。 \color{red}{项目编号&#xff1a;S018&#xff0c;文末获取源码。} 项目编号&#xff1a;S018&#xff0c;文末获取源码。 目录 一、摘要1.1 项目介绍1.2 项目录屏 二、功能模块2.1 数据中心模块2.2 角色管理模块2.3 车…...

单例模式-C++实现

目录 饿汉式懒汉式双检查锁&#xff0c;线程安全的版本什么是reorder&#xff1f;解决内存读写reorder不安全方法代码解释懒汉式的优缺点 单例模式是一种设计模式&#xff0c;用于确保一个类只有一个实例&#xff0c;并提供一个全局的访问点来获取该实例。它常用于需要在整个应…...

一种模板类实现和声明分开在生成的.a文件被使用时出现undefined reference时的一种解决方法

一种模板类实现和声明分开在生成的.a文件被使用时出现undefined reference时的一种解决方法 模板类头文件格式如下&#xff1a; test.h // test.h namespace test { namespace _testspace { class base { public: base(); ~base(); };template<bool T> class base_impl…...

js用到的算法

1.对象数组中&#xff0c;对象中有对象&#xff0c;数组根据对象中的对象打平 [{indexValueMap: { 68443: 0, 68457: 0 },rowName1: 固定收益类,rowName2: 交易类,rowName3: 次级},{indexValueMap: { 68443: 0, 68457: 0 },rowName1: 固定收益类,rowName2: 交易类,rowName3: 中…...

【科技素养】蓝桥杯STEMA 科技素养组模拟练习试卷9

1、商标也属于知识产权的一种。一个商标在注册之后&#xff0c;将会在&#xff08;&#xff09;的时间受到保护 A、20 年内 B、50 年内 C、直至注册人去世 D、10 年内 答案&#xff1a;D 2、人类史上第一位进入太空的宇航员是&#xff08;&#xff09;&#xff0c;他/她是…...

如何使用抖音直播调试入口扫码进行调试

使用抖音直播调试入口扫码进行调试的步骤如下&#xff1a; 确保你已经安装了抖音调试助手。打开调试助手&#xff0c;并在主界面点击“连接”按钮。在连接向导页面&#xff0c;根据提示连接你的抖音直播间。请确保你已经获取了直播间的token和scheme。连接成功后&#xff0c;你…...

AI智能人机对话小程序系统源码 附带完整的搭建教程

移动互联网的普及和快速发展&#xff0c;小程序已经成为了一种非常流行的应用形态。小程序具有即用即走、轻量级的特点&#xff0c;非常适合用于提供各种便捷服务。下面罗峰来给大家分享一款AI智能人机对话小程序系统源码&#xff0c;带有完整的搭建教程。 以下是部分代码示例…...

【腾讯云云上实验室】用向量数据库在金融信数据库分析中的实战运用

一、前言 这篇文章将带领读者探索数据库的多样化解决方案及其演进历程&#xff0c;特别关注向量数据库的重要性和在实际项目中的应用。 通过深入剖析腾讯云向量数据库及其在金融信用数据库分析中的实战运用&#xff0c;为读者提供全面而实用的指南&#xff0c;帮助他们理解、…...

2015年五一杯数学建模A题不确定性条件下的最优路径问题解题全过程文档及程序

2015年五一杯数学建模 A题 不确定性条件下的最优路径问题 原题再现 目前&#xff0c;交通拥挤和事故正越来越严重的困扰着城市交通。随着我国交通运输事业的迅速发展&#xff0c;交通“拥塞”已经成为很多城市的“痼疾”。在复杂的交通环境下&#xff0c;如何寻找一条可靠、快…...

5、Qt:项目中包含多个子项目(.pro)/子模块(.pri)

一、说明&#xff1a; 在进行项目开发过程中&#xff0c;会涉及子项目/子模块的问题 Qt中使用TEMPLATE subdirs添加多个子项目&#xff1b;子项目可以单独编译生成可执行文件&#xff08;exe&#xff09;或者动态链接库&#xff08;dll&#xff09;等&#xff0c;供其他模块…...

Facebook的特点优势

Facebook作为全球最大的社交媒体平台之一&#xff0c;同时也是最受欢迎的社交网站之一&#xff0c;Facebook具有许多独特的特点和优势。本文小编将说一些关于Facebook的特点及优势。 1、全球化 Facebook拥有数十亿的全球用户&#xff0c;覆盖了几乎所有国家和地区。这使得人们…...

Spring框架体系及Spring IOC思想

目录 Spring简介Spring体系结构SpringIOC控制反转思想自定义对象容器Spring实现IOCSpring容器类型容器接口容器实现类对象的创建方式使用构造方法使用工厂类的方法使用工厂类的静态方法对象的创建策略对象的销毁时机生命周期方法获取Bean对象的方式通过id/name获取通过类型获取…...

wordpress后台更新后 前端没变化的解决方法

使用siteground主机的wordpress网站&#xff0c;会出现更新了网站内容和修改了php模板文件、js文件、css文件、图片文件后&#xff0c;网站没有变化的情况。 不熟悉siteground主机的新手&#xff0c;遇到这个问题&#xff0c;就很抓狂&#xff0c;明明是哪都没操作错误&#x…...

反向工程与模型迁移:打造未来商品详情API的可持续创新体系

在电商行业蓬勃发展的当下&#xff0c;商品详情API作为连接电商平台与开发者、商家及用户的关键纽带&#xff0c;其重要性日益凸显。传统商品详情API主要聚焦于商品基本信息&#xff08;如名称、价格、库存等&#xff09;的获取与展示&#xff0c;已难以满足市场对个性化、智能…...

c#开发AI模型对话

AI模型 前面已经介绍了一般AI模型本地部署&#xff0c;直接调用现成的模型数据。这里主要讲述讲接口集成到我们自己的程序中使用方式。 微软提供了ML.NET来开发和使用AI模型&#xff0c;但是目前国内可能使用不多&#xff0c;至少实践例子很少看见。开发训练模型就不介绍了&am…...

20个超级好用的 CSS 动画库

分享 20 个最佳 CSS 动画库。 它们中的大多数将生成纯 CSS 代码&#xff0c;而不需要任何外部库。 1.Animate.css 一个开箱即用型的跨浏览器动画库&#xff0c;可供你在项目中使用。 2.Magic Animations CSS3 一组简单的动画&#xff0c;可以包含在你的网页或应用项目中。 3.An…...

jdbc查询mysql数据库时,出现id顺序错误的情况

我在repository中的查询语句如下所示&#xff0c;即传入一个List<intager>的数据&#xff0c;返回这些id的问题列表。但是由于数据库查询时ID列表的顺序与预期不一致&#xff0c;会导致返回的id是从小到大排列的&#xff0c;但我不希望这样。 Query("SELECT NEW com…...

sshd代码修改banner

sshd服务连接之后会收到字符串&#xff1a; SSH-2.0-OpenSSH_9.5 容易被hacker识别此服务为sshd服务。 是否可以通过修改此banner达到让人无法识别此服务的目的呢&#xff1f; 不能。因为这是写的SSH的协议中的。 也就是协议规定了banner必须这么写。 SSH- 开头&#xff0c…...

《信号与系统》第 6 章 信号与系统的时域和频域特性

目录 6.0 引言 6.1 傅里叶变换的模和相位表示 6.2 线性时不变系统频率响应的模和相位表示 6.2.1 线性与非线性相位 6.2.2 群时延 6.2.3 对数模和相位图 6.3 理想频率选择性滤波器的时域特性 6.4 非理想滤波器的时域和频域特性讨论 6.5 一阶与二阶连续时间系统 6.5.1 …...

CSS3相关知识点

CSS3相关知识点 CSS3私有前缀私有前缀私有前缀存在的意义常见浏览器的私有前缀 CSS3基本语法CSS3 新增长度单位CSS3 新增颜色设置方式CSS3 新增选择器CSS3 新增盒模型相关属性box-sizing 怪异盒模型resize调整盒子大小box-shadow 盒子阴影opacity 不透明度 CSS3 新增背景属性ba…...

轻量级Docker管理工具Docker Switchboard

简介 什么是 Docker Switchboard &#xff1f; Docker Switchboard 是一个轻量级的 Web 应用程序&#xff0c;用于管理 Docker 容器。它提供了一个干净、用户友好的界面来启动、停止和监控主机上运行的容器&#xff0c;使其成为本地开发、家庭实验室或小型服务器设置的理想选择…...

Python第七周作业

Python第七周作业 文章目录 Python第七周作业 1.使用open以只读模式打开文件data.txt&#xff0c;并逐行打印内容 2.使用pathlib模块获取当前脚本的绝对路径&#xff0c;并创建logs目录&#xff08;若不存在&#xff09; 3.递归遍历目录data&#xff0c;输出所有.csv文件的路径…...