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

相关文章
|
17天前
|
前端开发 JavaScript 安全
集成WebSocket在Spring Boot中可以用于实现实时的双向通信
集成WebSocket在Spring Boot中可以用于实现实时的双向通信
34 4
|
8天前
|
监控 网络协议 Java
使用Spring Boot和WebSocket实现实时通信
使用Spring Boot和WebSocket实现实时通信
|
9天前
|
监控 前端开发 网络协议
如何使用Spring Boot实现WebSocket通信
如何使用Spring Boot实现WebSocket通信
|
11天前
|
Java
springboot集成websocket
springboot集成websocket
9 0
|
26天前
|
移动开发 前端开发 JavaScript
|
26天前
|
网络协议 JavaScript Java
|
2月前
|
网络协议 Java Spring
Springboot 集成websocket
Springboot 集成websocket
39 0
|
搜索推荐 Java 关系型数据库
SpringBoot学习笔记-11:第十一章-SpringBoot 与检索
SpringBoot学习笔记-11:第十一章-SpringBoot 与检索
SpringBoot学习笔记-11:第十一章-SpringBoot 与检索
|
Java 应用服务中间件 Maven
传统maven项目和现在spring boot项目的区别
Spring Boot:传统 Web 项目与采用 Spring Boot 项目区别
402 0
传统maven项目和现在spring boot项目的区别
|
XML Java 数据库连接
创建springboot项目的基本流程——以宠物类别为例
创建springboot项目的基本流程——以宠物类别为例
132 0
创建springboot项目的基本流程——以宠物类别为例