Spring Boot学习笔记(六) WebSocket

WebSocket

什么是WebSocket?

WebSocket为浏览器和服务端提供了双工异步通信的功能,即浏览器可以向服务端发送消息,服务端也可以向浏览器发送消息。

WebSocket需要浏览器的支持,如IE 10+、Chrome 13+、Firefox 6+……

WebSocket是通过一个socket来实现双工异步通信能力的。但是直接使用WebSocket(或者SockJS:WebSocket协议的模拟,增加了当浏览器不支持WebSocket的时候的兼容支持)

协议开发程序显得特别繁琐,我们会使用它的子协议STOMP,它是一个更高级别的协议,STOMP协议使用一个基于帧(frame)的格式定义消息,与HTTP的request和response类似(具有类似于@RequestMapping的@MessageMapping)

Spring Boot 提供的自动配置

Spring Boot 对内嵌的Tomcat(7或者8)、Jetty9和Undertow使用WebSocket提供了支持。
配置源码存于org.springframework.boot.autoconfigure.websocket下:

这里写图片描述

Spring Boot为WebSocket提供的starter pom是spring-boot-starter-websocket

广播式:

广播式即服务端有消息时,会发消息发送给所有连接了当前endpoint的浏览器。

(1)配置WebSocket,需要在配置类上使用@EnableWebSocketMessageBroker开启WebSocket支持,并通过AbstractWebSocketMessageBrokerConfigurer类,重写其方法来配置WebSocket。

这里写图片描述

(2)浏览器向服务端发送的消息用此类接收

这里写图片描述

(3)服务器向浏览器发送的此类的消息:

这里写图片描述

(4)演示控制器:

这里写图片描述

(5)添加脚本。将stomp.min.js(STOMP协议的客户端脚本)、sockjs.min.js(SockJS的客户端脚本)以及jQuery放置在src/main/resources/static下。

这里写图片描述

(6)演示页面(在src/main/resources/templates下新建ws.html)

这里写图片描述
这里写图片描述
这里写图片描述

(7)配置viewController,为ws.html提供便捷的路径映射:

这里写图片描述

(8)运行。结果发现:当一个浏览器发送一个消息到服务端时,其他浏览器也能接收到从服务端发送来的这个消息。

(9)在Chrome浏览器下观察STOMP的帧(也可以从控制台上打印的data数据来看)

这里写图片描述

连接服务端的格式为:

这里写图片描述

连接成功的返回为:

这里写图片描述

向目标(destination)/welcome 发送消息的格式为:

这里写图片描述

红色框中就是要发送的消息。

从目标(destination)/topic/getReponse:

这里写图片描述

从目标(destination)/topic/getResponse接收的格式为:

这里写图片描述

猜你喜欢

转载自blog.csdn.net/zxzzxzzxz123/article/details/70596517