首页 > 解决方案 > 处理用户警报面板实时更新的最佳方式

问题描述

我想使用 Angular 和 java spring/spring boot 构建一个经典的警报面板,它可以实时响应事件和更新,这样用户就不需要刷新页面来获取他们的最新警报。由于需要实时更新,因此 Web 套接字似乎是我最好的选择。

在浏览了一些教程之后,似乎从 angular 连接到后端套接字将非常容易,并且可以轻松地打开/关闭连接。这将使用 stompjs 和 sock js-client。

但是,在创建用户将订阅的各种“主题”时,我的问题似乎出在后端。所有这些教程仅涵盖在服务器启动时创建一个每个用户都应该加入的静态房间(如聊天应用程序)。但是对于我的场景,我需要动态创建主题(每个用户一个单独的主题),而不是一开始就创建我的所有主题。

任何人都有使用 spring 或 spring boot 为我的用户动态创建主题以订阅的经验?

我一直在看的主要教程是: https ://medium.com/oril/spring-boot-websockets-angular-5-f2f4b1c14cee

标签: javaangularspringspring-bootwebsocket

解决方案


我发现通过在我的控制器中使用它:

@MessageMapping("/meeting/{roomId}")
private void sendMessageTpPrivateRoom(String message, @DestinationVariable String roomId) throws IOException {
    System.out.println("message sent to: " + roomId);
    this.template.convertAndSend("/meeting/" + roomId, message);
    addToHistory(roomId, message);
}

在我的配置中结合这个:

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

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

我能够动态创建聊天室,其中一个房间的客户不会收到来自另一个房间的客户的消息


推荐阅读