添加链接
link管理
链接快照平台
  • 输入网页链接,自动生成快照
  • 标签化管理网页链接
本文介绍了WebSocket的订阅与广播模式,包括maven依赖、SockJS配置、Spring Boot静态资源管理,以及Controller和Server端的设置。讲解了如何使用@SendTo和@SendToUser注解进行消息发送,其中@SendTo用于广播消息给所有订阅者,而@SendToUser则针对特定用户,支持广播选项。前端代码部分展示了如何根据配置进行连接和通信。 摘要生成于 ,由 DeepSeek-R1 满血版支持,
<dependency>
  	<groupId>org.springframework.boot</groupId>
    <artifactId>spring-boot-starter-websocket</artifactId>
</dependency>

2.configure配置

package com.myself.computerThinking.Subscription;
import org.springframework.messaging.simp.config.MessageBrokerRegistry;
import org.springframework.stereotype.Component;
import org.springframework.web.socket.config.annotation.AbstractWebSocketMessageBrokerConfigurer;
import org.springframework.web.socket.config.annotation.EnableWebSocketMessageBroker;
import org.springframework.web.socket.config.annotation.StompEndpointRegistry;
@Component
@EnableWebSocketMessageBroker
public class WebSocketConfig extends AbstractWebSocketMessageBrokerConfigurer {
    @Override
    public void configureMessageBroker(MessageBrokerRegistry registry) {
         * 用户可以订阅来自“/topic,/user”为前缀的消息
         * 客户端只可以订阅这个前缀的主题
        registry.enableSimpleBroker("/topic","/user");
         * 客户端发送过来的消息,需要以“/app”为前缀,再通过Broker转发给响应的Controller
        registry.setApplicationDestinationPrefixes("/app");
    @Override
    public void registerStompEndpoints(StompEndpointRegistry registry) {
         * 路径:"websocket/socketServer.action"被注册为STOMP端点,对外暴露,客户端通过该路径接入webScoket服务
       registry.addEndpoint("websocket/socketServer.action")
       .setAllowedOrigins("*")  //设置可以跨域请求
       .withSockJS();           // 添加SockJS支持    
 
 
  • 如果添加了SockJS()支持,前段页面代码:var socket = new SockJS(url); url为http、https开头
  • 没有添加支持,var socket = new WebSocket(url); url为ws、wss开头
  • 添加路径拦截器

    	@Override
                trpc/trpc 是一个用于 Rust 语言编写的 RPC 框架,支持服务端客户端的多种通信协议数据格式。适合在分布式系统中实现服务间的通信。特点是提供了高效的通信协议、简单易用的 API 良好的可扩展性。
    每个消费者都有自己的队列(queue)
    每个队列都要绑定到交换机(Exchange)(都是一些临时队列)
    生产者发送的消息只能发送到交换机,交换机来决定要发给那个队列,生产者无法决定。
    交换机将消息发送给绑定过的所有队列
    队列的消费者都能拿到消息,实现一条消息被多个消费者消费
    package com.mahy.notes.fanout;
    import com.mahy.utils.RabbitMQUt
    典型的应用就是
    1、消息推送,比如在oa系统上面,当某个人改变了oa流程的状态,则其他人应该收到修改的消息。
    2、还有一种场景就是 文件共享。A用户将文件共享给B用户、C用户、D用户,当A用户对文件进行更新时,就需要对B、C、D用户本地的文件进行同步更新;
    WebSocket为浏览器服务端提供了双工异步通信的功能,即浏览器可以向服务端发送消息,服务端也可以向浏览器发送消息。WebSocket需浏览器的支持,但一般目前的主流浏览器都支持。
    WebSocket是通过一个socket来实现双工异步通信能力的。但是直接使用WebSocket协议开发程序显得特别烦琐,我们会使用它的子协议STOMP,它是一个更高级别的协议,STOMP协议使用一个...
    

    withSockJS() :添加SockJS的支持。(SockJS有关信息:https://blog.csdn.net/john_62/article/details/78208177)
    SockJS是一个浏览器JavaScript库,它提供了一个类似于网络的对象。SockJS提供了一个连贯的、跨浏览器的Javascript API,它在浏览器和web服务器之间创建了一个低延迟、全双工、跨域通信通道。按浏览器是否支持WebSocket,以此使用三类传输对象:WebSocket > HTTP流 > HTTP长轮询