【问题标题】:Java Spring API - continous statusJava Spring API - 连续状态
【发布时间】:2021-09-08 15:01:32
【问题描述】:

我有一个关于如何构建可以持续更新前端状态的 Java Spring API 的问题。我希望这样做的方式是,我可以通过 POST 请求“更新”我们的应用程序的状态,然后这是可以通过 GET 请求从前端获得的信息。 POST 请求将在 VM 中使用。

只是为了让自己清楚:

  1. 前端“订阅”某种由用户 ID 标识的连接。
  2. 从 VM 内触发对后端的 POST 请求。
  3. 此新状态会广播到前端应用程序中的正确连接(基于用户 ID)。

我将如何构建这个?

我们的后端是一个 Java Spring Boot REST API,而前端是一个 React Web 应用程序。

【问题讨论】:

    标签: java reactjs spring spring-boot rest


    【解决方案1】:

    如果您需要使用来自后端的数据持续更新前端,一个好主意是使用WebSocket

    WebSocket 是一种计算机通信协议,通过单个 TCP 连接提供全双工通信通道

    一旦建立了 websocket,服务器就可以定期向前端发送状态更新。

    在后端,您需要维护每个 websocket 和用户 ID 之间的引用,以便在检测到特定用户的更新时,您可以将该信息发送到正确的 web socket。

    这通常用于聊天等实时应用程序,但您可以将其用于后端需要频繁向前端推送更新的任何类型的应用程序。

    您可以使用的其他选项是:

    • 轮询
    • 长轮询

    在轮询中是前端定期要求后端获取新数据。所以你需要定义一个调度策略来请求新数据。如果调度不是太频繁,则风险是您看不到足够的更新。如果调度过于频繁,则问题是您在不需要时忙于资源。

    长轮询是一种增强的轮询形式,如果没有可用数据,后端不会立即响应,而是在一段时间内保持连接,直到数据可用或达到超时。这个解决方案更好地利用了资源,但 websocket 仍然是最好的解决方案。

    【讨论】:

      【解决方案2】:

      以下是您的选择:

      • Websocket 服务器(最复杂的选项)
      • 长轮询(保持连接打开,新数据到达时更新)
      • 轮询(简单的选项,在客户端浏览器上循环 GET 请求以获取更新信息)

      【讨论】:

        【解决方案3】:

        我只能将 SSE(服务器发送的事件)添加到上面的两个答案中。带有 react 前端的演示 https://www.google.com/amp/s/turkogluc.com/server-sent-events-with-spring-boot-and-reactjs/amp/

        【讨论】:

          猜你喜欢
          • 2020-11-24
          • 1970-01-01
          • 2018-10-10
          • 2016-11-28
          • 2019-02-11
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 2011-12-07
          相关资源
          最近更新 更多