当前位置:首页 > 数码 > 详解基于-的-WebSocket-运行开发-SpringBoot (基于是什么意思啊)

详解基于-的-WebSocket-运行开发-SpringBoot (基于是什么意思啊)

admin7个月前 (04-15)数码40

在现代Web运行中,实时交互和数据推送的需求日益增长。WebSocket协定作为一种全双工通讯协定,准许服务端与客户端之间建设耐久性的衔接,实事实时、双向的数据传输,极大地优化了用户体验。本文将具体引见如何在SpringBoot框架中经常使用WebSocket启动高效、稳固的实时通讯。

WebSocket简介

WebSocket是一种在单个TCP衔接上启动全双工通讯的协定,其最大的特点是主机可以主意向客户端发送信息,而不须要客户端先动员恳求。相较于传统的HTTP长轮询或轮询机制,WebSocket能有效缩小不用要的网络通讯开支,并提供更优的实时性。

SpringBoot集成WebSocket

首先,在SpringBoot名目中引入WebSocket支持。在pom.xml文件中参与如下依赖:

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

创立一个WebSocket性能类,经过WebSocketConfigurer接口来自定义WebSocket处置逻辑。例如:

@Configuration@EnableWebSocketpublicclassWebSocketConfigimplementsWebSocketConfigurer{@OverridepublicvoidregisterWebSocketHandlers(WebSocketHandlerRegistryregistry){//注册WebSocket处置器,指定访问门路registry.addHandler(myWebSocketHandler(),"/webSocket/{sid}");}@BeanpublicWebSocketHandlermyWebSocketHandler(){returnnewMyWebSocketHandler();}}

创立一个成功WebSocketHandler接口的类,如MyWebSocketHandler,偏重写其中的方法以处置WebSocket的生命周期事情(如关上、封锁、接纳信息等):

@ComponentpublicclassMyWebSocketHandlerimplementsWebSocketHandler{privatestaticfinalCopyOnWriteArraySet<MyWebSocketHandler>webSocketSet=newCopyOnWriteArraySet<>();privateSessionsession;privateStringsid;@OverridepublicvoidafterConnectionEstablished(Sessionsession)throwsException{this.session=session;sid=session.getAttributes().get("sid").toString();webSocketSet.add(this);log.info("WebSocket衔接已建设,sid:{}",sid);}@OverridepublicvoidhandleMessage(Stringmessage,Sessionsession)throwsIOException{log.info("接纳到{}的信息:{}",sid,message);//群发信息或其余处置逻辑for(MyWebSocketHandleritem:webSocketSet){try{if(item.sid.equals(sid)){item.sendMessage(message);}}catch(IOExceptione){log.error("发送信息时出现失误",e);}}}@OverridepublicvoidhandleTransportError(Throwableexception,Sessionsession){if(session.isOpen()){session.close();}webSocketSet.remove(this);log.error("WebSocket衔接出现失误",exception);}@OverridepublicvoidafterConnectionClosed(Sessionsession,CloseStatusstatus){webSocketSet.remove(this);log.info("WebSocket衔接已封锁,sid:{},要素:{}",sid,status.getReason());}@OverridepublicbooleansupportsPartialMessages(){returnfalse;}privatevoidsendMessage(Stringmessage)throwsIOException{session.getBasicRemote().sendText(message);}//可以参与依据sid挑选的信息推送方法publicstaticvoidsendInfo(SocketMsgsocketMsg,StringtargetSid)throwsIOException{//...}}

在前端Script代码中经常使用WebSocketAPI与后端建设衔接,并处置各种事情:

运行开发varws=newWebSocket('ws://localhost:8080/webSocket/'+uniqueSessionId);ws.onopen=function(event){console.log('WebSocket衔接已建设');};ws.onmessage=function(event){console.log('接纳到主机信息:',event.data);};ws.onerror=function(error){console.error('WebSocket衔接出现失误:',error);};ws.onclose=function(event){console.log('WebSocket衔接已封锁,要素:',event.reason);};//发送信息到主机ws.send(JSON.stringify({message:'Hello,Server!'}));

总结

经过上述步骤,咱们曾经在SpringBoot名目中成功成功了WebSocket性能。须要留意的是,实践运行场景中或者须要对用户权限、衔接治理、信息队列、心跳检测等性能启动更粗疏的设计与成功,以确保WebSocket服务的稳固性和性能体现。同时,WebSocket技术的运行场景十分宽泛,包含但不限于即时聊天、在线单干、实时监控等。


SpringBoot+Vue+Websocket 实现服务器端向客户端主动发送消息

本文通过一个实际的场景来介绍在前后端分离的项目中通过 WebSocket 来实现服务器端主动向客户端发送消息的应用。 主要内容如下 Websocket 是一种在单个 TCP 连接上进行全双工通信的协议。 WebSocket 连接成功后,服务端与客户端可以双向通信。 在需要消息推送的场景,Websocket 相对于轮询能更好的节省服务器资源和带宽,并且能够更实时地进行通讯。 具体如下特点 在客户端的列表数据中有个 status 字段,服务器端需要花费较长的时间进行处理,处理完成后才会更新对应数据的 status 字段值,通过 Websocket 的处理流程如下: 通过注入 ServerEndpointExporter 类,用于在项目启动的时候自动将使用了 @ServerEndpoint 注解声明的 Websocket endpoint 注册到 WebSocketContainer 中。 为什么增加一个 ServerEndpointExporter Bean,并通过在一个类上增加 @ServerEndpoint 和 @Component 注解就可以实现服务器端 Websocket 功能,这里简单解析一下。 java 定义了一套 -api, 一个 HttpServlet 就是一个 HTTP 服务。 java websocket 并非基于 servlet-api 简单扩展, 而是新定义了一套 -api。 一个 websocket 服务对应一个 Endpoint。 与 ServletContext 对应, websocket-api 也定义了 WebSocketContainer, 而编程方式注册 websocket 的接口是继承自 WebSocketContainer 的 ServerContainer。 一个 websocket 可以接受并管理多个连接, 因此可被视作一个 server。 主流 servlet 容器都支持 websocket, 如 tomcat, jetty 等。 看 ServerContainer api 文档, 可从 ServletContext attribute 找到 ServerContainer。

WebSocket SpringBoot实现文件上传进度消息通知

文件上传进度消息: 异步耗时任务完成消息: 常见方案: 根据解析器构造,传入必要参数。 该解析器将替代默认实现 spring为WebSocket提供了很好的支持,参照官方文档即可完成服务搭建 继承 WebSocketMessageBrokerConfigurer 类,重写 registerStompEndpoints() configureMessageBroker() configureClientInboundChannel() 方法。 此处通过注解切面,在需要执行的方法前后想Message服务发送消息 该切面将以@SendMessage注解为切入点,利用反射获取形参名及参数值,封装MessageDto,调用Feign接口向消息模块发送消息 文件上传监听日志,成功监听上传进度 文件上传进度消息发送日志 耗时任务消息模块发送日志 前端消息渲染效果 大功告成! 尚有诸多缺点,但保证了基础功能够用,诸位大佬可以做个小参考。

免责声明:本文转载或采集自网络,版权归原作者所有。本网站刊发此文旨在传递更多信息,并不代表本网赞同其观点和对其真实性负责。如涉及版权、内容等问题,请联系本网,我们将在第一时间删除。同时,本网站不对所刊发内容的准确性、真实性、完整性、及时性、原创性等进行保证,请读者仅作参考,并请自行核实相关内容。对于因使用或依赖本文内容所产生的任何直接或间接损失,本网站不承担任何责任。

标签: SpringBoot

“详解基于-的-WebSocket-运行开发-SpringBoot (基于是什么意思啊)” 的相关文章

揭秘其强大功能背后的秘密-深入剖析SpringBoot底层原理 (揭秘其强大功夫的成语)

揭秘其强大功能背后的秘密-深入剖析SpringBoot底层原理 (揭秘其强大功夫的成语)

SpringBoot原理详解 简介 SpringBoot是一个开源框架,它简化了Java应用程序开发,特别是Web应用的开发。通过使用SpringBoot,开发者可以轻松创建和配置Spring应...

SpringBoot接口参数校验N种适用技巧大揭秘 (springernature)

SpringBoot接口参数校验N种适用技巧大揭秘 (springernature)

环境:SpringBoot2.6.12 实践的开发上班中大部分的接口都是须要启动参数有效性校验的,参数或者是便捷的基本数据类型,也或者是对象类型,基本上一切接纳参数的接口都是须要对这些参数启...

SpringBoot-Redis-处置海量重复提交疑问的片面指南 (springboot启动)

SpringBoot-Redis-处置海量重复提交疑问的片面指南 (springboot启动)

前言: 在实践的开发名目中,一个对外泄露的接口往往会面临很屡次恳求,咱们来解释一下幂等的概念: 恣意屡次口头所发生的影响均与一次性口头的影响相反 。依照这个含意,最终的含意就...

Boot的Java全栈项目-我在前端编写基于Spring (boot的jar包无法启动)

Boot的Java全栈项目-我在前端编写基于Spring (boot的jar包无法启动)

前言 本文将使用 NestJs + Sequelize + MySQL 完成基础运行,带大家了解 Node 服务端的基础搭建,同时也会对比 Java SpringBoot 项目的基础结构。...

SpringBoot-中的热部署和热加载 (springernature)

SpringBoot-中的热部署和热加载 (springernature)

在SpringBoot开发调试中,假设咱们每修正一行代码都须要重启调试,或许会比拟耗时。 SpringBoot团队针对这个疑问提供了spring-boot-devtools(简称:Devto...

资深开发者的机密战略-SpringBoot中经常使用ObjectMapper的终极指南 (资深开发者的工作内容)

资深开发者的机密战略-SpringBoot中经常使用ObjectMapper的终极指南 (资深开发者的工作内容)

1.每次new一个 在SpringBoot名目中要成功对象与Json字符串的互转,每次都须要像如下一样new一个ObjectMer对象: publicUserEntitystring2Ob...

SpringBoot-虚构线程的强强联结-接口吞吐量直线回升-效率飙升体验惊艳! (springboot)

SpringBoot-虚构线程的强强联结-接口吞吐量直线回升-效率飙升体验惊艳! (springboot)

在这篇博客中,咱们将看到如何在spring-boot中应用loom虚构线程。咱们还将在JMeter的协助下做一些负载测试,看看虚构线程和普通线程的照应期间如何。 首先,虚构线程是Projec...