springboot-7-WebSocket

一、WebSocket简介

为什么要什么websocket:https://blog.csdn.net/qq_42429911/article/details/88601279

用websocket可以做到:

  • 在线股票网站
  • 即使聊天
  • 多人在线聊天
  • 应用集群通信
  • 系统性能即时检测

二、springboot整合WebSocket

流程:

导入依赖

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

<!--主要是为了解决访问WebJars静态资源时必须携带版本号的繁琐问题
之前:http://localhost:8080/webjars/jquery/3.3.1/jquery.js
之后:http://localhost:8080/webjars/jquery/jquery.js-->
<!--Webjars版本定位工具(前端)-->
<dependency>
    <groupId>org.webjars</groupId>
    <artifactId>webjars-locator-core</artifactId>
</dependency>
<!--sockjs-client前端接收消息推送-->
<dependency>
    <groupId>org.webjars</groupId>
    <artifactId>sockjs-client</artifactId>
    <version>1.1.2</version>
</dependency>
<!--stomp简单文本协议-->
<dependency>
    <groupId>org.webjars</groupId>
    <artifactId>stomp-websocket</artifactId>
    <version>2.3.3</version>
</dependency>
<!--jquery-->
<dependency>
    <groupId>org.webjars</groupId>
    <artifactId>jquery</artifactId>
    <version>3.3.1</version>
</dependency>

配置webSocket

package com.wang.config;

import org.springframework.context.annotation.Configuration;
import org.springframework.messaging.simp.config.MessageBrokerRegistry;
import org.springframework.web.socket.config.annotation.EnableWebSocketMessageBroker;
import org.springframework.web.socket.config.annotation.StompEndpointRegistry;
import org.springframework.web.socket.config.annotation.WebSocketMessageBrokerConfigurer;

@Configuration
@EnableWebSocketMessageBroker
public class WebSocketConfig implements WebSocketMessageBrokerConfigurer {

    @Override
    public void configureMessageBroker(MessageBrokerRegistry registry) {
        registry.enableSimpleBroker("/topic");
        registry.setApplicationDestinationPrefixes("/app");
    }

    @Override
    public void registerStompEndpoints(StompEndpointRegistry registry) {
        registry.addEndpoint("/chat").withSockJS();
    }
}

导入的前端依赖的作用:

  • webjars-locator-core

被称为Webjars版本定位工具(前端)

主要是为了解决访问WebJars静态资源时必须携带版本号的繁琐问题
之前:http://localhost:8080/webjars/jquery/3.3.1/jquery.js
之后:http://localhost:8080/webjars/jquery/jquery.js

  • sockjs-client

在项目开发中我们经常遇到后端向前端进行消息推送,我们前端需要接收这些推送消息,并显示出来。这里接收推送消息我们需要使用sockjs的固定存储库:sockjs-client

SockJS是一个JavaScript库,提供跨浏览器JavaScript的API,创建了一个低延迟、全双工的浏览器和web服务器之间通信通道。

SockJS模仿WebSockets API,但它不是WebSocket,而是一个SockJS Javascript对象

  • stomp-websocket

STOMP(Simple Text-Orientated Messaging Protocol) 面向消息的简单文本协议

WebSocket是一个消息架构,不强制使用任何特定的消息协议,它依赖于应用层解释消息的含义;

与处在应用层的HTTP不同,WebSocket处在TCP上非常薄的一层,会将字节流转换为文本/二进制消息,因此,对于实际应用来说,WebSocket的通信形式层级过低,因此,可以在 WebSocket 之上使用 STOMP协议,来为浏览器 和 server间的 通信增加适当的消息语义。

如何理解 STOMP 与 WebSocket 的关系:
(1)HTTP协议解决了 web 浏览器发起请求以及 web 服务器响应请求的细节,假设 HTTP 协议 并不存在,只能使用 TCP 套接字来 编写 web 应用,你可能认为这是一件疯狂的事情;
(2) 直接使用 WebSocket(SockJS) 就很类似于 使用 TCP 套接字来编写 web 应用,因为没有高层协议,就需要我们定义应用间所发送消息的语义,还需要确保连接的两端都能遵循这些语义;
(3)同 HTTP 在 TCP 套接字上添加请求-响应模型层一样,STOMP 在 WebSocket 之上提供了一个基于帧的线路格式层,用来定义消息语义;

配置websocket详解:

spring框架提供了基于websocket的stomp支持,stomp是一个简单的可互操作的协议,通常被使用在中间服务器在客户端之间进行异步消息传递

  • configureMessageBroker(MessageBrokerRegistry registry)方法

registry.enableSimpleBroker("/topic");表示消息代理的前缀,即如果消息的前缀为“/topic”,就会把消息转发给消息代理(broker),再由消息代理将消息代理将消息广播给当前来连接的客户端

  • registry.setApplicationDestinationPrefixes("/app");

表示配置一个或多个前缀,通过这些前缀过滤掉需要被注解方法处理的消息,例如:前缀为“/app"的distination可以通过@MessageMapping注解的方法去处理,而其他的distination(例如”/topic","/queue")将直接被交给broker处理

  • registry.addEndpoint("/chat").withSockJS();

客户端将通过这个url来建立WebSocket连接

posted @ 2021-07-15 10:42  Coder-Wang  阅读(66)  评论(0编辑  收藏  举报