[{"data":1,"prerenderedAt":-1},["ShallowReactive",2],{"solution-scenes-menu":3,"tech-detail-2270":4},true,{"id":5,"title":6,"content":7,"picUrl":8,"tagIds":9,"keyWords":10,"htmlDescribe":11,"htmlUrl":12,"gmtCreate":13,"gmtModified":13,"articleInfoId":14},"2270","美畅物联丨实时通信新篇章：Spring Boot与WebSocket的深度融合实践","\u003Cp style=\"text-align:center\">\u003Cimg src=\"https:\u002F\u002Fqu-link.oss-cn-hangzhou.aliyuncs.com\u002F2024\u002F08\u002F30\u002Fe4a16b96-ff05-471f-bd36-9c6ea4f3ed0c.png\" alt=\"\" loading=\"lazy\" \u002F>\u003C\u002Fp>\u003Cp style=\"text-indent:2em;line-height:2\">在当今 Web 应用开发领域\u003Cspan style=\"font-family:宋体\">，\u003C\u002Fspan>实时通信功能已跃升为不可或缺的基石，特别是在即时消息传递、沉浸式在线游戏体验以及精准实时数据监控等关键领域\u003Cspan style=\"font-family:宋体\">。\u003C\u002Fspan>WebSocket协议，凭借其独特的全双工通讯机制，在单个持久连接上实现了服务器与客户端之间的无缝信息流通，自然成为了实现这些高级实时功能的首选技术架构。Spring Boot，作为Spring生态系统中一颗璀璨的明星，专为快速构建独立且具备生产级别的Spring应用而生，其与WebSocket的深度融合，更是为开发者们开辟了一条通往实时应用开发的快车道。\u003C\u002Fp>\u003Ch2>一、WebSocket 技术概览\u003C\u002Fh2>\u003Cp style=\"text-align:center\">\u003Cimg src=\"https:\u002F\u002Fqu-link.oss-cn-hangzhou.aliyuncs.com\u002F2024\u002F08\u002F30\u002F78e0324f-ec65-44df-b2a6-455901df048c.png\" alt=\"\" loading=\"lazy\" \u002F>\u003C\u002Fp>\u003Cp style=\"text-indent:2em;line-height:2\">自 2008 年诞生以来，WebSocket 协议便凭借其极具创新性的通信模式，引领着实时 Web 技术踏上了变革的征程。该协议于 2011 年正式晋升为国际标准，这一里程碑式的事件，象征着实时通信正式迈入了一个前所未有的全新发展阶段。WebSocket 通过成功创建一个持久稳定的 TCP 连接，实现了服务器与客户端之间的双向实时通信，对传统 HTTP 请求 - 响应的交互模式进行了彻底的革新。这种独特的机制，不但有效地降低了网络延迟，还极大程度地提升了数据传输的效率，为诸如在线聊天、实时数据监控、动态内容更新等诸多场景，提供了坚实有力的技术支撑。\u003C\u002Fp>\u003Ch2>二、Spring Boot 中接入 WebSocket\u003C\u002Fh2>\u003Cp style=\"text-align:center\">\u003Cimg src=\"https:\u002F\u002Fqu-link.oss-cn-hangzhou.aliyuncs.com\u002F2024\u002F08\u002F30\u002Fb95c34c6-a2a5-419e-99b3-df2c44250614.png\" alt=\"\" loading=\"lazy\" \u002F>\u003C\u002Fp>\u003Cp style=\"text-indent:2em;line-height:2\">Spring Boot 秉持着“约定优于配置”的先进理念以及丰富多样的自动配置特性，大幅简化了 Spring 应用的开发流程，为开发者开辟了一条便捷之路。当Spring Boot遇上WebSocket，两者携手为开发者打造了一个高效、易用的实时应用开发平台。通过无缝集成 Spring Framework 所提供的 WebSocket 支持，Spring Boot 应用能够举重若轻地实现与客户端的实时数据交换，为应用的实时性和交互性注入了强大的动力。\u003C\u002Fp>\u003Ch3>1. 引入依赖\u003C\u002Fh3>\u003Cp style=\"text-indent:2em;line-height:2\">首先，你需要在SpringBoot项目的pom.xml文件中添加WebSocket相关的依赖。Spring Boot 提供了spring-boot-starter-websocket来简化WebSocket的集成。\u003C\u002Fp>\u003Cp style=\"text-align:left\">\u003Cstrong>xml\u003C\u002Fstrong>\u003C\u002Fp>\u003Ctable>\u003Ctbody>\u003Ctr>\u003Ctd>\u003C\u002Ftd>\u003Ctd>&lt;dependency&gt;\u003C\u002Ftd>\u003C\u002Ftr>\u003Ctr>\u003Ctd>\u003C\u002Ftd>\u003Ctd>&lt;groupId&gt;org.springframework.boot&lt;\u002FgroupId&gt;\u003C\u002Ftd>\u003C\u002Ftr>\u003Ctr>\u003Ctd>\u003C\u002Ftd>\u003Ctd>&lt;artifactId&gt;spring-boot-starter-websocket&lt;\u002FartifactId&gt;\u003C\u002Ftd>\u003C\u002Ftr>\u003Ctr>\u003Ctd>\u003C\u002Ftd>\u003Ctd>&lt;\u002Fdependency&gt;\u003C\u002Ftd>\u003C\u002Ftr>\u003C\u002Ftbody>\u003C\u002Ftable>\u003Cp style=\"text-indent:2em;line-height:2\">对于采用 Gradle 的用户而言，\u003Cspan style=\"font-family:宋体\">需要\u003C\u002Fspan>在 build.gradle 文件中添加与之对应的依赖配置\u003Cspan style=\"font-family:宋体\">：\u003C\u002Fspan>\u003C\u002Fp>\u003Cp style=\"text-align:left\">\u003Cstrong>gradle\u003C\u002Fstrong>\u003C\u002Fp>\u003Ctable>\u003Ctbody>\u003Ctr>\u003Ctd>\u003C\u002Ftd>\u003Ctd>implementation 'org.springframework.boot:spring-boot-starter-websocket'\u003C\u002Ftd>\u003C\u002Ftr>\u003C\u002Ftbody>\u003C\u002Ftable>\u003Ch3>\u003Cstrong>2. 配置WebSocket\u003C\u002Fstrong>\u003C\u002Fh3>\u003Cp style=\"text-indent:2em;line-height:2\">配置WebSocket：Spring Boot提供了灵活的WebSocket配置方式，包括通过WebSocketConfigurer接口编程配置，以及使用@EnableWebSocketMessageBroker注解开启并配置基于消息代理的WebSocket支持。为了充分利用Spring Boot的自动配置特性，并实现更高级的消息处理功能，推荐使用注解方式配置WebSocket消息代理。\u003C\u002Fp>\u003Cp style=\"text-indent:2em;line-height:2\">在配置类中，你可以设置消息前缀、注册消息处理器等：\u003C\u002Fp>\u003Cp style=\"text-align:left\">\u003Cstrong>Java\u003C\u002Fstrong>\u003C\u002Fp>\u003Ctable>\u003Ctbody>\u003Ctr>\u003Ctd>\u003C\u002Ftd>\u003Ctd>@Configuration\u003C\u002Ftd>\u003C\u002Ftr>\u003Ctr>\u003Ctd>\u003C\u002Ftd>\u003Ctd>@EnableWebSocketMessageBroker\u003C\u002Ftd>\u003C\u002Ftr>\u003Ctr>\u003Ctd>\u003C\u002Ftd>\u003Ctd>public class WebSocketConfig implements WebSocketMessageBrokerConfigurer {\u003C\u002Ftd>\u003C\u002Ftr>\u003Ctr>\u003Ctd>\u003C\u002Ftd>\u003Ctd>\u003C\u002Ftd>\u003C\u002Ftr>\u003Ctr>\u003Ctd>\u003C\u002Ftd>\u003Ctd>@Override\u003C\u002Ftd>\u003C\u002Ftr>\u003Ctr>\u003Ctd>\u003C\u002Ftd>\u003Ctd>public void registerStompEndpoints(StompEndpointRegistry registry) {\u003C\u002Ftd>\u003C\u002Ftr>\u003Ctr>\u003Ctd>\u003C\u002Ftd>\u003Ctd>\u002F\u002F 注册一个WebSocket的端点，客户端将通过这个端点建立连接\u003C\u002Ftd>\u003C\u002Ftr>\u003Ctr>\u003Ctd>\u003C\u002Ftd>\u003Ctd>registry.addEndpoint(\"\u002Fws\").withSockJS();\u003C\u002Ftd>\u003C\u002Ftr>\u003Ctr>\u003Ctd>\u003C\u002Ftd>\u003Ctd>}\u003C\u002Ftd>\u003C\u002Ftr>\u003Ctr>\u003Ctd>\u003C\u002Ftd>\u003Ctd>\u003C\u002Ftd>\u003C\u002Ftr>\u003Ctr>\u003Ctd>\u003C\u002Ftd>\u003Ctd>@Override\u003C\u002Ftd>\u003C\u002Ftr>\u003Ctr>\u003Ctd>\u003C\u002Ftd>\u003Ctd>public void configureMessageBroker(MessageBrokerRegistry registry) {\u003C\u002Ftd>\u003C\u002Ftr>\u003Ctr>\u003Ctd>\u003C\u002Ftd>\u003Ctd>\u002F\u002F 启用前缀为\u002Fapp的消息代理\u003C\u002Ftd>\u003C\u002Ftr>\u003Ctr>\u003Ctd>\u003C\u002Ftd>\u003Ctd>registry.enableSimpleBroker(\"\u002Ftopic\");\u003C\u002Ftd>\u003C\u002Ftr>\u003Ctr>\u003Ctd>\u003C\u002Ftd>\u003Ctd>\u002F\u002F 设置前缀为\u002Fapp的消息目的地将被发送到指定的消息处理器\u003C\u002Ftd>\u003C\u002Ftr>\u003Ctr>\u003Ctd>\u003C\u002Ftd>\u003Ctd>registry.setApplicationDestinationPrefixes(\"\u002Fapp\");\u003C\u002Ftd>\u003C\u002Ftr>\u003Ctr>\u003Ctd>\u003C\u002Ftd>\u003Ctd>}\u003C\u002Ftd>\u003C\u002Ftr>\u003Ctr>\u003Ctd>\u003C\u002Ftd>\u003Ctd>}\u003C\u002Ftd>\u003C\u002Ftr>\u003C\u002Ftbody>\u003C\u002Ftable>\u003Ch3>\u003Cstrong>3. 创建消息处理器\u003C\u002Fstrong>\u003C\u002Fh3>\u003Cp style=\"text-indent:2em;line-height:2\">WebSocket 的核心在于消息的精准发送与高效接收。在 Spring Boot 中，开发者能够通过创建带有@MessageMapping 和@SendTo 注解的控制器方法，来清晰明确地定义 WebSocket 消息的接收逻辑以及发送目标。这种基于注解的编程方式，不仅简化了代码结构，还提高了开发效率。\u003C\u002Fp>\u003Cp style=\"text-align:left\">\u003Cstrong>java\u003C\u002Fstrong>\u003C\u002Fp>\u003Ctable>\u003Ctbody>\u003Ctr>\u003Ctd>\u003C\u002Ftd>\u003Ctd>@Controller\u003C\u002Ftd>\u003C\u002Ftr>\u003Ctr>\u003Ctd>\u003C\u002Ftd>\u003Ctd>public class WebSocketController {\u003C\u002Ftd>\u003C\u002Ftr>\u003Ctr>\u003Ctd>\u003C\u002Ftd>\u003Ctd>\u003C\u002Ftd>\u003C\u002Ftr>\u003Ctr>\u003Ctd>\u003C\u002Ftd>\u003Ctd>@MessageMapping(\"\u002Fhello\")\u003C\u002Ftd>\u003C\u002Ftr>\u003Ctr>\u003Ctd>\u003C\u002Ftd>\u003Ctd>@SendTo(\"\u002Ftopic\u002Fgreetings\")\u003C\u002Ftd>\u003C\u002Ftr>\u003Ctr>\u003Ctd>\u003C\u002Ftd>\u003Ctd>public Greeting greeting(HelloMessage message) throws Exception {\u003C\u002Ftd>\u003C\u002Ftr>\u003Ctr>\u003Ctd>\u003C\u002Ftd>\u003Ctd>Thread.sleep(1000); \u002F\u002F 模拟延迟\u003C\u002Ftd>\u003C\u002Ftr>\u003Ctr>\u003Ctd>\u003C\u002Ftd>\u003Ctd>return new Greeting(\"Hello, \" + message.getName() + \"!\");\u003C\u002Ftd>\u003C\u002Ftr>\u003Ctr>\u003Ctd>\u003C\u002Ftd>\u003Ctd>}\u003C\u002Ftd>\u003C\u002Ftr>\u003Ctr>\u003Ctd>\u003C\u002Ftd>\u003Ctd>\u003C\u002Ftd>\u003C\u002Ftr>\u003Ctr>\u003Ctd>\u003C\u002Ftd>\u003Ctd>\u002F\u002F 其他相关消息处理方法...\u003C\u002Ftd>\u003C\u002Ftr>\u003Ctr>\u003Ctd>\u003C\u002Ftd>\u003Ctd>}\u003C\u002Ftd>\u003C\u002Ftr>\u003C\u002Ftbody>\u003C\u002Ftable>\u003Ch3>\u003Cstrong>4. 客户端实现\u003C\u002Fstrong>\u003C\u002Fh3>\u003Cp style=\"text-indent:2em;line-height:2\">为了与服务器端的WebSocket服务进行通信，客户端需要实现WebSocket连接并订阅相关主题。以下是一个使用SockJS和Stomp.js库的JavaScript示例：\u003C\u002Fp>\u003Cp style=\"text-align:left\">\u003Cstrong>javascript\u003C\u002Fstrong>\u003C\u002Fp>\u003Ctable>\u003Ctbody>\u003Ctr>\u003Ctd>\u003C\u002Ftd>\u003Ctd>var socket = new SockJS('\u002Fws');\u003C\u002Ftd>\u003C\u002Ftr>\u003Ctr>\u003Ctd>\u003C\u002Ftd>\u003Ctd>var stompClient = Stomp.over(socket);\u003C\u002Ftd>\u003C\u002Ftr>\u003Ctr>\u003Ctd>\u003C\u002Ftd>\u003Ctd>\u003C\u002Ftd>\u003C\u002Ftr>\u003Ctr>\u003Ctd>\u003C\u002Ftd>\u003Ctd>stompClient.connect({}, function (frame) {\u003C\u002Ftd>\u003C\u002Ftr>\u003Ctr>\u003Ctd>\u003C\u002Ftd>\u003Ctd>stompClient.subscribe('\u002Ftopic\u002Fgreetings', function (greeting) {\u003C\u002Ftd>\u003C\u002Ftr>\u003Ctr>\u003Ctd>\u003C\u002Ftd>\u003Ctd>showGreeting(JSON.parse(greeting.body).content);\u003C\u002Ftd>\u003C\u002Ftr>\u003Ctr>\u003Ctd>\u003C\u002Ftd>\u003Ctd>});\u003C\u002Ftd>\u003C\u002Ftr>\u003Ctr>\u003Ctd>\u003C\u002Ftd>\u003Ctd>\u003C\u002Ftd>\u003C\u002Ftr>\u003Ctr>\u003Ctd>\u003C\u002Ftd>\u003Ctd>stompClient.send(\"\u002Fapp\u002Fhello\", {}, JSON.stringify({'name': 'World'}));\u003C\u002Ftd>\u003C\u002Ftr>\u003Ctr>\u003Ctd>\u003C\u002Ftd>\u003Ctd>});\u003C\u002Ftd>\u003C\u002Ftr>\u003Ctr>\u003Ctd>\u003C\u002Ftd>\u003Ctd>\u003C\u002Ftd>\u003C\u002Ftr>\u003Ctr>\u003Ctd>\u003C\u002Ftd>\u003Ctd>function showGreeting(message) {\u003C\u002Ftd>\u003C\u002Ftr>\u003Ctr>\u003Ctd>\u003C\u002Ftd>\u003Ctd>var response = $(\"#greetings\");\u003C\u002Ftd>\u003C\u002Ftr>\u003Ctr>\u003Ctd>\u003C\u002Ftd>\u003Ctd>response.append(\"&lt;tr&gt;&lt;td&gt;\" + message + \"&lt;\u002Ftd&gt;&lt;\u002Ftr&gt;\");\u003C\u002Ftd>\u003C\u002Ftr>\u003Ctr>\u003Ctd>\u003C\u002Ftd>\u003Ctd>}\u003C\u002Ftd>\u003C\u002Ftr>\u003C\u002Ftbody>\u003C\u002Ftable>\u003Ch2>三、实际的应用场景\u003C\u002Fh2>\u003Cp style=\"text-indent:2em;text-align:left;line-height:2\">WebSocket 在 Spring Boot 当中的应用场景广泛且深入，从日常生活中频繁使用的在线聊天应用，到关键业务场景下至关重要的实时通知系统、实时数据驾驶舱，再到充满乐趣与挑战的多人在线游戏以及实时协作工具，无一不展现出其强大的生命力和无限的发展潜力。\u003C\u002Fp>\u003Cp style=\"text-align:center;line-height:2\">\u003Cimg src=\"https:\u002F\u002Fqu-link.oss-cn-hangzhou.aliyuncs.com\u002F2024\u002F08\u002F30\u002F6dcfe5de-a94e-4e29-ab6c-d917aa836e4a.png\" alt=\"\" loading=\"lazy\" \u002F>\u003C\u002Fp>\u003Cp style=\"text-indent:2em;text-align:left;line-height:2\">\u003Cspan style=\"font-family:宋体\">即时通讯\u003C\u002Fspan>应用：WebSocket 使得聊天消息能够瞬间传输，用户无需经历漫长的等待页面刷新或者频繁的轮询请求，便能尽情享受流畅无比、毫无阻碍的聊天体验。\u003C\u002Fp>\u003Cp style=\"text-align:center;line-height:2\">\u003Cimg src=\"https:\u002F\u002Fqu-link.oss-cn-hangzhou.aliyuncs.com\u002F2024\u002F08\u002F30\u002Fd02c21d8-d643-48b3-9c7b-c61e5c6bf734.png\" alt=\"\" loading=\"lazy\" \u002F>\u003C\u002Fp>\u003Cp style=\"text-indent:2em;text-align:left;line-height:2\">实时通知系统：\u003Cspan style=\"font-family:宋体\">通过\u003C\u002Fspan>WebSocket\u003Cspan style=\"font-family:宋体\">的实现通知系统，畅联AIoT开放云平台可以在出现事件\u003C\u002Fspan>警\u003Cspan style=\"font-family:宋体\">情时\u003C\u002Fspan>第一时间主动向客户端发送通知，而无需客户端不断轮询服务器。\u003C\u002Fp>\u003Cp style=\"text-align:center;line-height:2\">\u003Cimg src=\"https:\u002F\u002Fqu-link.oss-cn-hangzhou.aliyuncs.com\u002F2024\u002F08\u002F30\u002F302a46ab-39da-4d6b-b9d3-3580a0cab780.png\" alt=\"\" loading=\"lazy\" \u002F>\u003C\u002Fp>\u003Cp style=\"text-indent:2em;text-align:left;line-height:2\">实时数据驾驶舱：在需要实时监控数据的应用中，\u003Cspan style=\"font-family:宋体\">如畅联AIoT开放云平台对\u003C\u002Fspan>物联网设备监控\u003Cspan style=\"font-family:宋体\">时\u003C\u002Fspan>，WebSocket可以实时更新\u003Cspan style=\"font-family:宋体\">畅联云平台\u003C\u002Fspan>驾驶舱\u003Cspan style=\"font-family:宋体\">的数据\u003C\u002Fspan>。这有助于用户快速\u003Cspan style=\"font-family:宋体\">物联网设备数值\u003C\u002Fspan>变化或设备状态\u003Cspan style=\"font-family:宋体\">，\u003C\u002Fspan>帮助用户快速响应数据变化或设备状态变化。\u003C\u002Fp>\u003Cp style=\"text-align:center;line-height:2\">\u003Cimg src=\"https:\u002F\u002Fqu-link.oss-cn-hangzhou.aliyuncs.com\u002F2024\u002F08\u002F30\u002F8e463386-236f-4c76-a390-94588dcb0ad7.png\" alt=\"\" loading=\"lazy\" \u002F>\u003C\u002Fp>\u003Cp style=\"text-indent:2em;text-align:left;line-height:2\">多人在线游戏\u003Cspan style=\"font-family:宋体\">：\u003C\u002Fspan>WebSocket 的实时通信能力为多人在线游戏构建了稳定且可靠的游戏状态同步机制，让玩家能够全身心地沉浸在游戏当中，畅享极致的游戏体验。\u003C\u002Fp>\u003Cp style=\"text-align:center;line-height:2\">\u003Cimg src=\"https:\u002F\u002Fqu-link.oss-cn-hangzhou.aliyuncs.com\u002F2024\u002F08\u002F30\u002F93bd7ec7-5ec3-4c24-bceb-35493f7b989d.png\" alt=\"\" loading=\"lazy\" \u002F>\u003C\u002Fp>\u003Cp style=\"text-indent:2em;text-align:left;line-height:2\">实时协作工具：在文档编辑、代码编写或者设计创作等场景之中，WebSocket 成功实现了多人之间的实时协作与同步更新，极大幅度地提升了工作效率和创意产出水平。\u003C\u002Fp>\u003Ch2 style=\"text-align:left;line-height:2\">四、总结\u003C\u002Fh2>\u003Cp style=\"text-align:center;line-height:2\"> \u003Cimg src=\"https:\u002F\u002Fqu-link.oss-cn-hangzhou.aliyuncs.com\u002F2024\u002F08\u002F30\u002F573fc564-5e86-4004-a4e5-2f4d8335b460.png\" alt=\"\" loading=\"lazy\" \u002F>\u003C\u002Fp>\u003Cp style=\"text-indent:2em;text-align:left;line-height:2\">Spring Boot 与 WebSocket 的深度融合为开发者呈献了一个强大且灵活多变的实时应用开发平台。通过简单的配置和灵活的消息处理机制，Spring Boot应用能够轻松实现与客户端之间的实时数据交互，满足现代Web应用对于实时性、交互性的高要求。无论是构建在线聊天应用、实时通知系统还是实时数据监控平台等场景下的实时通信功能，Spring Boot与WebSocket的强强联合都将是您的不二之选。\u003C\u002Fp>\u003Cp style=\"text-indent:2em;text-align:left;line-height:2\">\u003Cspan style=\"color:rgb(0, 0, 0);background-color:rgb(255, 255, 255)\">————————————————\u003C\u002Fspan>\u003C\u002Fp>\u003Cp style=\"text-indent:2em;text-align:left;line-height:2\">\u003Cspan style=\"color:rgb(0, 0, 0);background-color:rgb(255, 255, 255);font-size:16px\">关注\u003C\u002Fspan>\u003Cspan style=\"color:rgb(66, 144, 247);background-color:rgb(255, 255, 255);font-size:16px\">\u003Cstrong>“美畅物联”\u003C\u002Fstrong>\u003C\u002Fspan>\u003Cspan style=\"color:rgb(0, 0, 0);background-color:rgb(255, 255, 255);font-size:16px\">，了解更多视频汇聚及AIoT底座解决方案。\u003C\u002Fspan>\u003C\u002Fp>\u003Cp> \u003C\u002Fp>","https:\u002F\u002Fqu-link.oss-cn-hangzhou.aliyuncs.com\u002F2024\u002F08\u002F30\u002F28948087-0f5b-42ad-a516-f9e4371f45b9.jpg","9,8","美畅，美畅物联，畅联，畅联云平台，视频监控云平台，云视频监控，视频云平台，视频开放平台，视频感知云，视频接入网关，AIoT综合接入网关，视频中台，物联网中台，无插件播放，H265播放，Ehome，ISUP， GB28181，GB35114，gat1400，JT808，JT1078","原创技术分享","http:\u002F\u002Fwww.24hlink.cn\u002Fweb-index\u002FOB5JPNM.html","2024-08-30 16:31:09","762"]