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

时间:2019-07-30 10:08:58

标签: java angular spring-boot

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

我尝试过的方法。 1.每分钟page refresh之后,API将自动调用并    用旧数据获取新数据。    但是在这种情况下,每隔一分钟就会发生一次服务器调用,即使    如果没有与此相关的新请求。 2.我使用了web socket programming,但是在这种情况下code debug是    主要挑战。

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

3 个答案:

答案 0 :(得分:0)

您可以使用signalR。它与Web服务器保持永久连接,并允许从客户端到服务器的通知,看起来像您所需要的。

答案 1 :(得分:0)

您可以从服务器创建一个持久性响应流,该持久性响应流将在同一响应流中为每个来宾请求写入新数据,并且在前端,您可以为该请求的数据建立一个侦听器。这样,单个请求将得以维护,数据将得到及时更新。

答案 2 :(得分:0)

TL; DR

由于您不知道新数据何时到达服务器,因此让客户端请求数据不是您所提到的理想数据。我想到了三种选择,实时数据库,推送通知和WebSockets。

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

  
      
  1. 启动Chrome开发者工具
  2.   
  3. 加载页面并启动WebSocket连接
  4.   
  5. 点击“网络”标签。
  6.   
  7. 从左侧列表中选择WebSocket连接(状态为“ 101交换协议”。
  8.   
  9. 单击“框架”子选项卡。二进制帧将显示长度和时间戳,并指示是否被遮罩。文字框将   显示还包括有效载荷内容。
  10.   

实时数据库

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

推送通知

类似地,Firebase(和其他公司,例如Amazon)向您提供推送通知/云消息服务,该服务可让您将数据发送到客户端,而无需客户端发出请求。通过使用在 Service Worker API [2]之上构建的 Notification API Push API 可以正常工作。此技术的优点是,即使用户关闭了应用程序,您也可以通知用户。

WebSockets

WebSockets允许您建立双向通信,然后允许各方(客户端和服务器)彼此发送数据。与传统的WebSocket相比,Socket.IO之类的某些工具为您提供了更多的控制和功能(通道/房间,自动重新连接等),而这会带来一些开销。