实时更新用户警报面板的最佳方法

时间:2019-04-04 23:40:00

标签: java angular spring spring-boot websocket

我想使用angular和java spring / spring boot构建一个经典的警报面板,该面板可以实时响应事件和更新,因此用户无需刷新页面即可获取最新警报。由于需要实时更新,因此网络套接字似乎是我最好的选择。

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

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

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

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

1 个答案:

答案 0 :(得分:0)

我通过在控制器中使用它来发现这一点:

@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");
}

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