java - 自动发送数据到客户端,无需API调用

标签 java angular spring-boot

我正在寻找一种解决方案,服务器将发送数据,而无需从 UI 端调用任何 API。 基本上,在我的应用程序中有两个面板 1. 接待员仪表板 2. 访客移动应用程序。 如果任何请求来自访客应用程序,则该请求应自动显示在接待员仪表板中,而无需刷新页面(隐式/显式)。

我尝试过这些方法。 1. 每分钟页面刷新后自动调用API 用旧数据得到新数据。 但在这种情况下,每隔一分钟就会发生服务器调用,即使 如果没有与此相关的新请求。 2.我使用了Web套接字编程,但在这种情况下代码调试是 主要挑战。

除了这些还有其他解决办法吗?如果没有,那么我该如何解决我面临的问题。

最佳答案

TL;DR

由于您不知道新数据何时到达服务器,因此让客户端请求数据并不理想,正如您已经提到的那样。我想到了三种替代方案:实时数据库、推送通知和 WebSocket。

WebSockets 似乎是一个不错的选择,因为您可以轻松地在服务器端实现它,并且大多数现代浏览器已经在 native 实现了它。您提到它很难调试,但是您知道 Chrome 对它的支持吗[ 1 ]?

  1. Launch Chrome Developer tools
  2. Load your page and initiate the WebSocket connections
  3. Click the Network Tab.
  4. Select the WebSocket connection from the list on the left (it will have status of "101 Switching Protocols".
  5. Click the Frames sub-tab. Binary frames will show up with a length and time-stamp and indicate whether they are masked. Text frames will show also include the payload content.

实时数据库

Firebase 提供多种服务,其中之一是实时数据库(旧版本)和firestore 数据库(新版本)。使用他们的 SDK,您可以从服务器端更新数据库并监听客户端的更改。在客户端,您将使用可观察对象,一旦数据库发生更改(如果您正在监听更改),您将在客户端上收到该数据,而无需执行请求。 SDK 很可能会提出请求,但老实说,我不知道他们如何处理这个问题,但这减轻了开发人员的负担。许多请求都是付费的,但值得一看。

推送通知

类似地,Firebase(以及其他公司,例如 Amazon)为您提供推送通知/云消息传递服务,该服务允许您将数据发送到客户端,而无需客户端发出请求。这是通过使用构建在 Service Worker API 之上的 Notification APIPush API 来实现的 [ 2 ]。这种技术的优点是即使用户关闭了应用程序,您也可以通知用户。

WebSocket

WebSockets 允许您建立双向通信,然后允许各方(客户端和服务器)相互发送数据。一些工具如 Socket.IO与传统的 WebSocket 相比,它为您提供更多的控制和功能( channel /房间、自动重新连接等),但需要一些开销。

关于java - 自动发送数据到客户端,无需API调用,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/57269247/

相关文章:

java - Spring-Data 中子对象不与父对象一起获取

java - 如何使用 apache Camel 根据正文内容进行 GET api 调用

java - 从数组创建可变列表?

javascript - 如何在formBuilder中比较两个值?

java - Log4j2 - 无法访问ListAppender

angular - 从订阅 typescript 返回值

javascript - Angular6:在导航时在 canActivate 中保留查询参数

java - 对于 Spring boot 中的 GET 请求,如何在单个 JSON 响应中发送 Header 中的一些特定信息和 Body 中的一些信息?

java - 当我运行给定的代码时,我得到 A B A 作为输出。我不明白为什么它再次打印 A

optimization - 为什么Java API 使用int 而不是short 或byte?