SpringBoot 整合 WebSocket|学习笔记

简介: 快速学习 SpringBoot 整合 WebSocket

开发者学堂课程【SpringBoot 实战教程 SpringBoot 整合 WebSocket】学习笔记,与课程紧密联系,让用户快速学习知识。

课程地址:https://developer.aliyun.com/learning/course/651/detail/10824


SpringBoot 整合 WebSocket


内容介绍

一、介绍

二、操作

 

一、介绍

1、HTTP 协议是一种无状态的、无连接的、单向的应用层协议。它采用了请求/响应模型。通信请求只能由客户端发起,服务端对请求做出应答处理。这种通信模型有一个弊端: HTTP 协议无法实现服务器主动向客户端发起消息。

2、这种单向请求的缺点,如果服务器有连续的状态变化,客户端要获知就非常麻烦。大多数 Web 应用程序将通过频繁的异步 JavaScript 和 XML (AJAX)请求实现长轮询。轮询的效率低,非常浪费资源(因为必须不停连接,或者 HTTP 连接始终打开)。

3、WebSocket 连接允许客户端和服务器之间进行全双工通信,以便任一方都可以通过建立的连接将数据推送到另一端。WebSocket 只需要建立一次连接,就可以一直保持连接状态。这相比于轮询方式的不停建立连接显然效率要大大提高。

 

二、操作

1、以下是 springboot 提供的依赖把它放入工程中

<dependency>

<groupId>org.springframework.boot</groupId>

<artifactId>spring-boot-starter-WebSocket</artifactId>

</dependency>

事先创建好工程并进行 web 依赖在这个案例中需要用到页面使用 thymeleaf 模版引擎所以 thymeleaf 的依赖也要加上

<dependency>

<groupId>org.springframework.boot</groupId>

<artifactId>spring-boot-starter-thymeleaf</artifactId>

</dependency>

2、创建 webSocket 的配置类,也就是把 webSocket 的相关配置写在配置中创建包 com.qianfeng.config

创建配置类,WebSocketConfig。

WebSocket 的配置类

/ /WebSocket 的配置类

@Configuration  这是一个配置所以要加注解就相当于在xml文件中写的配置

/ / 开启对 WebSocket 的支持

@EnableWebSocketMessageBroker

public classWebSocketConfigextends

AbstractWebSocketMessageBrokerConfigurer {

//注册一个 STOMP 协议的节点,并映射到指定的 URL,这个协议是 WebSocket 协议的子协议

@Override

public void registerStompEndpoints ( StompEndpointRegistry

registry) {

/ /StompEndpointRegistry 进行注册注册一个 STOMP endpoint, 并指定使用 SockJS 协议

registry. addEndpoint ("/endpointSocket") . withSockJS() ;

//配置消息代理

@Override

public void configureMessageBroker (MessageBrokerRegistry

registry) {

//配置一个广播式的消息代理

registry. enableSimpleBroker ("/topic") ;

}

}

3、客户端可以向服务器端发送数据服务器端也可以向数据段随时发送数据把数据端向服务端发送的数据封装成实体类服务器端向客户端发送的数据也封装成相应的实体类也就是要封装两个实体类就是面向对象的思想命名为 SocketMessage

比如发送字符串类型的数据定义一个字符串类型的成员即可

//浏览器向服务器发送消息实体类

public class SocketMessage {

private String message;

public String getMessage () {

return message;

}

public voidsetMessage (String message) {

this .message = message;

}

}

4、同样也创建一个服务器端向客户端发送的数据也封装成实体类命名为 SocketResponse

//服务器向浏览器响应数据的封装实体类

public class

SocketResponse {

private String responseMessage;

public SocketResponse (String responseMessage) {

this. responseMessage = responseMessage ;

public String getResponseMessage () {

return

responseMessage;

}

}

5、创建 controller,WebSocketController。

控制类发送的数据是日期也就是时间

@Controller

public class WebSocketController {

private SimpleDateFormat sf = new

SimpleDateFormat ("yyyy-MM-ddHH:mm: ss") ;

//当浏览器向服务器端发送 STOMP 请求时,通过 @MessageMapping 注解来映射 /getServerTime 地址

@MessageMapping(value = "/getServerTime")

//当服务端有消息时,会对订阅了@SendTo 中的路径的客户端可以接收到相应服务器端发送消息

@SendTo(value = " /topic/getResponse")

public SocketResponse serverTime ( Socke tMessage message) throwsInterruptedException {

return new SocketRe sponse (message . getMessage () +sf. format (new Date() ) ) ;

}

}

6、需要有一个页面这个页面用的是 thymeleaf 模版在 resources 下创建templates 文件夹,templates。

页面是事先写好的直接可以用是基于 WebSocket 协议请求服务器端这里面用到了 sockjs还用到了 stomp 的 WebSocket 协议还用到 jquery因为它们三个属于静态资源所以把它们放到 resources 下的 static 下所以再创建一个文件夹

7、把以下三个文件进行拷贝

image.png

8、这个页面上有连接断开连接获取服务器端时间的数据三个功能所以首先需要把这个页面显示出来

<button id="connect" onclick="connect() ; ">连接</button>

<button id= "disconnect" onclick="disconnect() ; ">断开连接< /button>

<button id= "serverTimeId" onclick="getserverTime () ; ">获取服务器端时间</button>

这个页面是 html 的所以在 controller 中写一个功能转到html页面springboot 会默认去 templates 下找相应的页面只需要写 html 的名称即可当用 index 路径去请求时就会转到 webSocket.html 页面

@RequestMapping("/ index'")

public String toPage ()

{

Return"webSocket" ;

}

9、启动类中进行扫描

@SpringBootApplication(scanBasePackages="com. qianfeng")

进行启动访问 localhost:8080/index和服务器端进行连接连接之后比如现在希望服务器端给客户端发送数据点击获取服务器端时间以下就是服务器端向客户端发送的数据客户端并没有请求服务器端,2018-04-03 20:32:24是当时的时间

image.png

相关文章
|
5月前
|
Java
SpringBoot快速搭建WebSocket服务端和客户端
由于工作需要,研究了SpringBoot搭建WebSocket双向通信的过程,其他的教程看了许多,感觉讲得太复杂,很容易弄乱,这里我只展示快速搭建过程。
1497 1
|
12月前
|
开发框架 前端开发 网络协议
Spring Boot结合Netty和WebSocket,实现后台向前端实时推送信息
【10月更文挑战第18天】 在现代互联网应用中,实时通信变得越来越重要。WebSocket作为一种在单个TCP连接上进行全双工通信的协议,为客户端和服务器之间的实时数据传输提供了一种高效的解决方案。Netty作为一个高性能、事件驱动的NIO框架,它基于Java NIO实现了异步和事件驱动的网络应用程序。Spring Boot是一个基于Spring框架的微服务开发框架,它提供了许多开箱即用的功能和简化配置的机制。本文将详细介绍如何使用Spring Boot集成Netty和WebSocket,实现后台向前端推送信息的功能。
2622 1
|
8月前
|
消息中间件 XML 前端开发
springBoot集成websocket实时消息推送
本文介绍了如何在Spring Boot项目中集成WebSocket实现实时消息推送。首先,通过引入`spring-boot-starter-websocket`依赖,配置`WebSocketConfig`类来启用WebSocket支持。接着,创建`WebSocketTest`服务器类,处理连接、消息收发及错误等事件,并使用`ConcurrentHashMap`管理用户连接。最后,前端通过JavaScript建立WebSocket连接,监听消息并进行相应处理。此方案适用于需要实时通信的应用场景,如聊天室、通知系统等。
974 2
|
12月前
|
前端开发 Java C++
RSocket vs WebSocket:Spring Boot 3.3 中的两大实时通信利器
本文介绍了在 Spring Boot 3.3 中使用 RSocket 和 WebSocket 实现实时通信的方法。RSocket 是一种高效的网络通信协议,支持多种通信模式,适用于微服务和流式数据传输。WebSocket 则是一种标准协议,支持全双工通信,适合实时数据更新场景。文章通过一个完整的示例,展示了如何配置项目、实现前后端交互和消息传递,并提供了详细的代码示例。通过这些技术,可以大幅提升系统的响应速度和处理效率。
|
开发框架 网络协议 Java
SpringBoot WebSocket大揭秘:实时通信、高效协作,一文让你彻底解锁!
【8月更文挑战第25天】本文介绍如何在SpringBoot项目中集成WebSocket以实现客户端与服务端的实时通信。首先概述了WebSocket的基本原理及其优势,接着详细阐述了集成步骤:添加依赖、配置WebSocket、定义WebSocket接口及进行测试。通过示例代码展示了整个过程,旨在帮助开发者更好地理解和应用这一技术。
897 1
|
JavaScript 前端开发 网络协议
WebSocket在Java Spring Boot+Vue框架中实现消息推送功能
在现代Web应用中,实时消息提醒是一项非常重要的功能,能够极大地提升用户体验。WebSocket作为一种在单个TCP连接上进行全双工通信的协议,为实现实时消息提醒提供了高效且低延迟的解决方案。本文将详细介绍如何在Java Spring Boot后端和Vue前端框架中利用WebSocket实现消息提醒功能。
1138 49
|
消息中间件 缓存 前端开发
Springboot 整合 WebSocket ,使用STOMP协议 ,前后端整合实战 (一)
Springboot 整合 WebSocket ,使用STOMP协议 ,前后端整合实战 (一)
2824 1
Springboot 整合 WebSocket ,使用STOMP协议 ,前后端整合实战 (一)
|
消息中间件 存储 负载均衡
Springboot 整合 WebSocket ,使用STOMP协议+Redis 解决负载场景问题(二)
Springboot 整合 WebSocket ,使用STOMP协议+Redis 解决负载场景问题(二)
1592 0
Springboot 整合 WebSocket ,使用STOMP协议+Redis 解决负载场景问题(二)
|
14天前
|
前端开发 安全 Java
基于springboot+vue开发的会议预约管理系统
一个完整的会议预约管理系统,包含前端用户界面、管理后台和后端API服务。 ### 后端 - **框架**: Spring Boot 2.7.18 - **数据库**: MySQL 5.6+ - **ORM**: MyBatis Plus 3.5.3.1 - **安全**: Spring Security + JWT - **Java版本**: Java 11 ### 前端 - **框架**: Vue 3.3.4 - **UI组件**: Element Plus 2.3.8 - **构建工具**: Vite 4.4.5 - **状态管理**: Pinia 2.1.6 - **HTTP客户端
114 4
基于springboot+vue开发的会议预约管理系统