RFC 6455即webSockets协议提供了一种标准化的方式去建立全双工,双方面交流的通道在客户端和服务端甚至单一的TCP连接中进行通信;websocket协议其跟HTTP的TCP协议不同,但是其设计目的是通过HTTP协议进行工作,可以使用40或443年者端口和重新使用现有的防火墙规则。
得到HTTP/1.1/spring-websocket-portfolio/投资组合 主持人:localhost: 8080 升级:websocket 连接:升级 Sec-WebSocket-Key: Uc9l9TMkWGbHFD2qnFHltg==Sec-WebSocket-Protocol: v10。跺脚,v11.stomp Sec-WebSocket-Version: 13 来源:http://localhost: 8080
webSockets的交互是以HTTP协议开始的,使用升级头转向使用升级连接,如果非200状态成功响应就类似于下面的信息,如果WebSocket服务器是运行在nginx是需要配置WebSocket升级请求;如果是运行在云上,需要查阅相关的云是否支持WebSocket;
HTTP/1.1 101交换协议 升级:websocket 连接:升级 Sec-WebSocket-Accept: 1 qvdfyhu9hpol4jyynxf623gzn0=Sec-WebSocket-Protocol: v10.stomp
在HTTP和其他中一个应用需要很多的URL;应用和客户端是通过请求和响应的风格使用这些网址进行交互;服务端会路由这些请求给基于HTTP的URL或者方法或者头进行处理;
WebSockets通常在初始化的时候就只有一个链接,所有应用的消息都是通过相同的TCP连接进行流动,这指向一个完全不同的异步,事件驱动的消息传递体系结构。
WebSocket是一种低端的协议,不像HTTP,其不规定消息中内容中任何的语义信息;这意味着其没有任何方式去路由或者处理这些信息,除非客户端和服务端在语义上达成一致。
WebSocket客户端和服务端其交流是通过使用更加高级的消息协议(比如跺脚)和基HTTP握于手请求的Sec-WebSocket-Protocol头;
WebSockets可以使web页面具有动态性和交互性。然而,在许多情况下,Ajax和HTTP流或长轮询(轮询)可以提供一个简单有效的解决方案.北京流和轮询适用于消息不频繁的交互,websocket适用于消息较频繁的交互;在因特网上由于没有升级标题或者关闭了空闲的长链接,受限于在你有限的代理可能会将WebSockets的交互排除;
<强> 4.1依赖强>
& lt; parent> & lt; groupId> org.springframework.boot & lt; artifactId> spring-boot-starter-parent & lt; version> 2.1.1.RELEASE & lt; relativePath/比; & lt;/parent> & lt; dependencies> & lt; !——websocket依赖——比; & lt; dependency> & lt; groupId> org.springframework.boot & lt; artifactId> spring-boot-starter-websocket & lt;/dependency> & lt; !——模板引擎——比; & lt; dependency> & lt; groupId> org.springframework.boot & lt; artifactId> spring-boot-starter-thymeleaf & lt;/dependency> & lt;/dependencies>
<强> 4.2配置强>
/* * * @Author lsc * @Description & lt; p> websocket配置类& lt;/p> * @Date 2019/11/12 22:27 *///使用跺脚协议来传输基于消息代理的消息,控制器支持在@ controller类中使用@MessageMapping @EnableWebSocketMessageBroker @Configurable @EnableWebSocket @ component 公共类WebConfig实现WebSocketMessageBrokerConfigurer { @Override 公共空间registerStompEndpoints (StompEndpointRegistry注册表){//注册跺脚的端点(端点),并且映射指定的url registry.addEndpoint ("/websocket”) .setAllowedOrigins(“*”)//添加允许跨域访问 .withSockJS();//指定SockJS协议 } @Override 公共空间configureMessageBroker (MessageBrokerRegistry注册表){//启动广播模式代理,只有符合的的路径才发送消息 registry.enableSimpleBroker(“/主题”); } }
<强> 5.1接受消息实体强>
/* * * @Author lsc * @Description & lt; p>接受客户端消息& lt;/p> * @Date 2019/11/12 22:42 */公开课AcceptMessages { 私人字符串名称; 公共字符串getName () { 返回名称; } }
<强> 5.2发送消息实体强>
/* * * @Author lsc * @Description & lt; p>发送消息给客户端& lt;/p> * @Date 2019/11/12 22:42 */公开课sendmessage { 私人字符串responseMessage; 公共字符串getResponseMessage () { 返回responseMessage; } 公共空间setResponseMessage(字符串responseMessage) { 这一点。responseMessage=responseMessage; } }springboot集成WebSockets广播消息(推荐)