美畅物联丨实时通信新篇章:Spring Boot与WebSocket的深度融合实践

news2024/9/28 5:31:29

在当今 Web 应用开发领域,实时通信功能已跃升为不可或缺的基石,特别是在即时消息传递、沉浸式在线游戏体验以及精准实时数据监控等关键领域。WebSocket协议,凭借其独特的全双工通讯机制,在单个持久连接上实现了服务器与客户端之间的无缝信息流通,自然成为了实现这些高级实时功能的首选技术架构。Spring Boot,作为Spring生态系统中一颗璀璨的明星,专为快速构建独立且具备生产级别的Spring应用而生,其与WebSocket的深度融合,更是为开发者们开辟了一条通往实时应用开发的快车道。

一、WebSocket 技术概览

自 2008 年诞生以来,WebSocket 协议便凭借其极具创新性的通信模式,引领着实时 Web 技术踏上了变革的征程。该协议于 2011 年正式晋升为国际标准,这一里程碑式的事件,象征着实时通信正式迈入了一个前所未有的全新发展阶段。WebSocket 通过成功创建一个持久稳定的 TCP 连接,实现了服务器与客户端之间的双向实时通信,对传统 HTTP 请求 - 响应的交互模式进行了彻底的革新。这种独特的机制,不但有效地降低了网络延迟,还极大程度地提升了数据传输的效率,为诸如在线聊天、实时数据监控、动态内容更新等诸多场景,提供了坚实有力的技术支撑。

二、Spring Boot 中接入 WebSocket

Spring Boot 秉持着“约定优于配置”的先进理念以及丰富多样的自动配置特性,大幅简化了 Spring 应用的开发流程,为开发者开辟了一条便捷之路。当Spring Boot遇上WebSocket,两者携手为开发者打造了一个高效、易用的实时应用开发平台。通过无缝集成 Spring Framework 所提供的 WebSocket 支持,Spring Boot 应用能够举重若轻地实现与客户端的实时数据交换,为应用的实时性和交互性注入了强大的动力。

1. 引入依赖

首先,你需要在SpringBoot项目的pom.xml文件中添加WebSocket相关的依赖。Spring Boot 提供了spring-boot-starter-websocket来简化WebSocket的集成。

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

对于采用 Gradle 的用户而言,需要在 build.gradle 文件中添加与之对应的依赖配置:

implementation 'org.springframework.boot:spring-boot-starter-websocket'

2. 配置WebSocket

配置WebSocket:Spring Boot提供了灵活的WebSocket配置方式,包括通过WebSocketConfigurer接口编程配置,以及使用@EnableWebSocketMessageBroker注解开启并配置基于消息代理的WebSocket支持。为了充分利用Spring Boot的自动配置特性,并实现更高级的消息处理功能,推荐使用注解方式配置WebSocket消息代理。

在配置类中,你可以设置消息前缀、注册消息处理器等:

@Configuration 
@EnableWebSocketMessageBroker 
public class WebSocketConfig implements WebSocketMessageBrokerConfigurer { 

@Override 
public void registerStompEndpoints(StompEndpointRegistry registry) { 
// 注册一个WebSocket的端点,客户端将通过这个端点建立连接 
registry.addEndpoint("/ws").withSockJS(); 
} 

@Override 
public void configureMessageBroker(MessageBrokerRegistry registry) { 
// 启用前缀为/app的消息代理 
registry.enableSimpleBroker("/topic"); 
// 设置前缀为/app的消息目的地将被发送到指定的消息处理器 
registry.setApplicationDestinationPrefixes("/app"); 
} 
}

3. 创建消息处理器

WebSocket 的核心在于消息的精准发送与高效接收。在 Spring Boot 中,开发者能够通过创建带有@MessageMapping 和@SendTo 注解的控制器方法,来清晰明确地定义 WebSocket 消息的接收逻辑以及发送目标。这种基于注解的编程方式,不仅简化了代码结构,还提高了开发效率。

@Controller 
public class WebSocketController { 

@MessageMapping("/hello") 
@SendTo("/topic/greetings") 
public Greeting greeting(HelloMessage message) throws Exception { 
Thread.sleep(1000); // 模拟延迟 
return new Greeting("Hello, " + message.getName() + "!"); 
} 

// 其他相关消息处理方法... 
}

4. 客户端实现

为了与服务器端的WebSocket服务进行通信,客户端需要实现WebSocket连接并订阅相关主题。以下是一个使用SockJS和Stomp.js库的JavaScript示例:

var socket = new SockJS('/ws'); 
var stompClient = Stomp.over(socket); 

stompClient.connect({}, function (frame) { 
stompClient.subscribe('/topic/greetings', function (greeting) { 
showGreeting(JSON.parse(greeting.body).content); 
}); 

stompClient.send("/app/hello", {}, JSON.stringify({'name': 'World'})); 
}); 

function showGreeting(message) { 
var response = $("#greetings"); 
response.append("<tr><td>" + message + "</td></tr>"); 
}

三、实际的应用场景

WebSocket 在 Spring Boot 当中的应用场景广泛且深入,从日常生活中频繁使用的在线聊天应用,到关键业务场景下至关重要的实时通知系统、实时数据驾驶舱,再到充满乐趣与挑战的多人在线游戏以及实时协作工具,无一不展现出其强大的生命力和无限的发展潜力。

即时通讯应用:WebSocket 使得聊天消息能够瞬间传输,用户无需经历漫长的等待页面刷新或者频繁的轮询请求,便能尽情享受流畅无比、毫无阻碍的聊天体验。

实时通知系统:通过WebSocket的实现通知系统,畅联AIoT开放云平台可以在出现事件警情时第一时间主动向客户端发送通知,而无需客户端不断轮询服务器。

实时数据驾驶舱:在需要实时监控数据的应用中,如畅联AIoT开放云平台对物联网设备监控时,WebSocket可以实时更新畅联云平台驾驶舱的数据。这有助于用户快速物联网设备数值变化或设备状态,帮助用户快速响应数据变化或设备状态变化。

多人在线游戏:WebSocket 的实时通信能力为多人在线游戏构建了稳定且可靠的游戏状态同步机制,让玩家能够全身心地沉浸在游戏当中,畅享极致的游戏体验。

实时协作工具:在文档编辑、代码编写或者设计创作等场景之中,WebSocket 成功实现了多人之间的实时协作与同步更新,极大幅度地提升了工作效率和创意产出水平。

四、总结

Spring Boot 与 WebSocket 的深度融合为开发者呈献了一个强大且灵活多变的实时应用开发平台。通过简单的配置和灵活的消息处理机制,Spring Boot应用能够轻松实现与客户端之间的实时数据交互,满足现代Web应用对于实时性、交互性的高要求。无论是构建在线聊天应用、实时通知系统还是实时数据监控平台等场景下的实时通信功能,Spring Boot与WebSocket的强强联合都将是您的不二之选。

————————————————

关注“美畅物联”,了解更多视频汇聚及AIoT底座解决方案。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/2089132.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

软件测试面试题「值得收藏」

1、B/S架构和C/S架构区别&#xff1f; 1、架构不同&#xff1a;B/S架构是浏览器/服务器架构&#xff0c;C/S架构是客户端/服务器架构。 2、客户端不同&#xff1a;B/S架构的客户端是浏览器&#xff0c;C/S架构的客户端是客户端程序。 3、功能不同&#xff1a;B/S架构主要用于…

PhpStorm2024版设置自动换行(软换行)

Settings > Editor > General > Soft Wraps 选中并加上对应的文件

链动2+1小程序定制开发在餐饮品牌重塑中的应用探索——以“妈妈饺子馆”为例

摘要&#xff1a;随着互联网技术的飞速发展&#xff0c;餐饮业正经历着前所未有的变革。传统餐饮企业如何在激烈的市场竞争中脱颖而出&#xff0c;成为行业关注的焦点。本文以“妈妈饺子馆”为例&#xff0c;探讨链动21小程序定制开发在餐饮品牌重塑中的应用&#xff0c;特别是…

8 大模型微调

大部分接触大模型的同学大家可能都受限于资源的限制&#xff0c;无法对大模型重新训练。那么如何解决这一困境&#xff1f;我们暂且假定大模型为通用化模型&#xff0c;但是在某一方面的专业领域知识却不强&#xff0c;如果使用专业领域知识重新训练调整&#xff0c;这对资源还…

如何选到好的宠物空气净化器?有没有推荐的品牌?

从最初的手忙脚乱、对宠物养护知识一无所知的新手小白&#xff0c;到如今能够游刃有余地处理各种宠物问题、养宠多年的资深铲屎官&#xff0c;这么久&#xff0c;我也积累了不少的经验&#xff0c;就是希望能为自家的毛孩子提供最健康、最适合的生活。 这么久的养猫历程遇见的…

tcp/udp 可视化 调试工具; tcp/udp 发送客户端;查看tcp连接;netassist;packet sender;tcp view;

前言 最近对接物联设备&#xff0c;物联设备会往java端传送数据&#xff0c;在联调前&#xff0c;问厂商要来了样例数据&#xff0c;然后就找到了netassist和packetsender两款tcp发送工具&#xff0c;来模拟请求&#xff1b;还用tcpview来查看建立的连接。 netassist netass…

BERT:Pre-training of Deep Bidirectional Transformers forLanguage Understanding

个人觉着BERT是一篇读起来很爽的论文 摘要 我们引入了一种新的语言表示模型BERT&#xff0c;它代表Bidirectional Encoder Representations from Transformers。与最近的语言表示模型不同(Peters et al.&#xff0c; 2018a;Radford et al.&#xff0c; 2018)&#xff0c; BER…

52.x86游戏实战-XXX获取房间坐标

免责声明&#xff1a;内容仅供学习参考&#xff0c;请合法利用知识&#xff0c;禁止进行违法犯罪活动&#xff01; 本次游戏没法给 内容参考于&#xff1a;微尘网络安全 工具下载&#xff1a; 链接&#xff1a;https://pan.baidu.com/s/1rEEJnt85npn7N38Ai0_F2Q?pwd6tw3 提…

【Docker】个人笔记

文章目录 Docker三个基本概念镜像(Image)容器(Container)仓库(Repository) Docker命令基础命令查看版本信息显示详细信息从仓库拉取镜像列出本地存储的镜像删除一个或多个镜像列出所有运行中的容器运行一个新的容器停止一个运行中的容器启动一个已停止的容器重启一个容器删除一…

论文泛读: DETRs Beat YOLOs on Real-time Object Detection

[toc[ DETRs Beat YOLOs on Real-time Object Detection 论文地址: https://openaccess.thecvf.com/content/CVPR2024/html/Zhao_DETRs_Beat_YOLOs_on_Real-time_Object_Detection_CVPR_2024_paper.html 代码地址: https://zhao-yian.github.io/RTDETR 动机 现状 YOLO系列因…

车联网技术在智能交通系统中的设计与实现(论文+源码)

1系统方案设计 根据系统设计需求&#xff0c;展开系统详细方案设计。如图2.1所示为系统设计结构框图。系统以STM32单片机为主控制器&#xff0c;利用ATGM336 GPS模块实现车辆实时定位&#xff0c;借助倾斜检测模块监测车辆倾斜角度&#xff0c;并通过OLED液晶显示器实时显示监…

揭晓9款敏捷团队必备的协作工具选择

本文将介绍9款团队协作工具&#xff1a;1.Worktile&#xff1b;2. PingCode&#xff1b;3. 融云 (RongCloud)&#xff1b;4. 好团队&#xff1b;5. 微软Teams&#xff1b;6. 小钉贴&#xff1b;7. Lark&#xff1b;8. Bit.ai&#xff1b;9. Hive。 在敏捷开发团队中&#xff0c…

Veeam Backup Replication v12.2 发布,新增功能概述

Veeam Backup & Replication v12.2 发布&#xff0c;新增功能概述 Veeam Data Platform | 面向混合云和多云的 备份和恢复 监控和分析 恢复编排 请访问原文链接&#xff1a;https://sysin.org/blog/veeam-backup-12/&#xff0c;查看最新版。原创作品&#xff0c;转载请保…

烂大街的测试左移和右移

01 测试左移与右移的定义 通俗的讲&#xff1a;左移是往开发阶段移&#xff0c;右移是往发布之后移。 正常测试&#xff1a;提测后的测试工作——到——发布验证完成阶段。 测试左移&#xff1a;提测之前的测试。 如&#xff1a;代码单元测试&#xff0c;代码质量检测&#x…

数据结构的三要素以及数据类型和抽象数据类型

一.数据结构的三要素&#xff1a; 二.逻辑结构&#xff1a; 三.数据的运算&#xff1a; 三.数据的物理结构&#xff08;存储结构&#xff09;&#xff1a; 1.数据的存储结构&#xff1a;有4种 顺序存储 链式存储 索引存储 散列存储 注&#xff1a;顺序存储数据之间必须相…

没有编程基础?这款数据分析工具也能轻松上手

在当前快节奏的工业环境中&#xff0c;工厂管理者越来越依赖数据分析来优化生产流程、提升效率、降低成本。然而&#xff0c;很多传统的数据分析工具不仅操作复杂&#xff0c;而且费用高昂&#xff0c;让不少工厂望而却步。最近&#xff0c;我发现了一款非常实用的报表工具&…

[MySql]保姆级上手教程

介绍 通过数据库管理系统, 编写执行SQL语句, 实现对数据库数据的管理 数据库(DataBase): 储存和管理数据的仓库数据库管理系统(DBMS): 操作和管理数据库的软件SQL语言: 操作关系型数据库的通用语言数据库可以分为关系型数据库和非关系型数据库 相关产品 常见的关系型数据库产…

STM32G474之TIM1捕获1模式

STM32G474采用TIM8产生方波信号&#xff0c;使用TIM1工作于捕获1模式&#xff0c;并计算方波频率。捕获方波周期&#xff0c;在有些开发中&#xff0c;还是能用到。建议开发时使用HAL库自带的库函数。使用寄存器方法也可以实现&#xff0c;但是后期修改不太方便。 测试时&…

springboot学习(2)

1、springboot入门 需求&#xff1a;使用 Springboot 开发一个 web 应用&#xff0c;浏览器发起请求 /hello 后&#xff0c;给浏览器返回字符串 "hello world!" 2、基本尝试步骤 创建Maven工程导入 spring-boot-starter-web (起步依赖)编写Controller提供启动类 &…

无人机 PX4 飞控 | ROS应用层开发:offboard 模式切换详细总结

无人机 PX4 飞控 | ROS应用层开发&#xff1a;offboard 模式切换详细总结 PX4 offboard 模式介绍通过mavros 进行offboard模式切换代码测试 通过地面站进行offboard模式切换通过遥控器拨杆切换offboard模式 PX4 offboard 模式介绍 PX4 是一个广为熟知的开源飞控软件&#xff0…