【问题标题】:Spring Boot - Push message to Angular UISpring Boot - 将消息推送到 Angular UI
【发布时间】:2019-07-11 11:28:54
【问题描述】:

我想开发一个应用程序,我想将消息(或数据)从后端 Spring 启动应用程序推送到 UI。

我有以下要求 -

  1. 假设有一个 REST 服务使用 POST 方法接受来自其他应用程序的数据。
  2. 此数据将被推送到 UI。

假设有一个后台进程正在运行,它会生成事件,我们希望将这些事件推送到 UI。

为此,我偶然发现了我们可以在 Spring Boot 应用程序中使用的 WebSocket 组件。

但是,是否需要任何其他设置才能将传入数据推送到 UI?

感谢任何帮助。

谢谢,

阿维纳什·德什穆赫

【问题讨论】:

  • 无论如何,您都需要某种消息代理。它可以是 Spring STOMP 或其他 WS 扩展(ActiveMQ over amqp、Azure Service Bus 等)。

标签: spring spring-boot spring-websocket


【解决方案1】:

后端无法神奇地将更新推送到客户端 UI。后端将无法知道 UI 的存在位置(即 UI 的 ip 地址是什么),即使知道,它也可能无法建立连接(由于防火墙或 NAT)。

因此,客户端 UI 必须请求更新。可以做到这一点的一种方法是在 UI 应用程序中设置一个计时器,通过 REST 轮询更新。但这本质上就是 websocket 所做的 - 开销要少得多。

这就是您日常使用的常见应用程序一直在工作的方式。所以我不确定你为什么不想走 websockets 路线。

...

从 Spring 5.0.5.RELEASE 开始,由于 @SendToUser 注解的改进,无需进行任何自定义,这允许我们通过“/user/{sessionId}/”向用户目的地发送消息...”而不是“/user/{user}/...”。

这意味着注释依赖于输入消息的会话 id,有效地向会话私有的目标发送回复:

...

这里有一个很好的例子:

https://www.baeldung.com/spring-websockets-sendtouser

【讨论】:

  • 您好 Rawb,感谢您的回复。我将通过您提供的链接并尝试理解它。再次感谢!!
  • 嗨 Rawb,我浏览了您在链接中提到的示例。但是,您是否可以提供任何适用于此用例的示例?关于“所以我不确定你为什么不想走 websockets 路线。” -> 我正在尝试这个,因为在某些用例中我需要将事件推送到 UI。我遇到了 SseEmitter 类
  • 我不知道您的用例是什么,但服务器发送的事件可能会起作用。它们与 websocket 非常相似,但我不喜欢它们,因为它们需要 http 连接保持打开状态。这意味着它在非常大的规模(大量用户或长连接)上并不真正可行,但根据您需要做什么,它们可能是合适的。它们还意味着它们将要求您的前端知道何时断开连接并重新连接。由于连接问题或网络更改,连接可能会中断。
  • 嗨 Rawb,我可以在 SimpleMessagingTemplate 类的帮助下使用 websocket。借助该类,我们可以将消息传递到主题或队列,客户端可以在其中订阅服务器上传的消息。
猜你喜欢
  • 2020-04-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多