【问题标题】:Restful Server Response triggered Via Client通过客户端触发的 Restful 服务器响应
【发布时间】:2015-12-28 20:58:32
【问题描述】:

这个问题可能听起来有点抽象,回答了(但我的搜索没有偶然发现一个方便的答案)或根本不具体,但我会尽量提供尽可能多的信息。

我正在构建一个移动应用程序,它将收集感官数据并将其发送到远程服务器。远程服务器将在 mySQL 数据库中收集所有这些数据并进行计算(不是 mysql 数据库,另一个进程/程序)。我想知道的是:

在数据库中进行一些更新后,是否可以使用诸如“后台线程”之类的东西从 RESTful 服务器向某个客户端(可能喜欢上次更新的客户端)发送响应?或者这应该通过服务器-客户端响应的套接字连接来完成?

一些备注:

我正在使用 javaEE、Spring MVC 和 hibernate 和 tomcat(因为我对环境很熟悉,虽然是以更异步的方式)。

我认为这将是一种方便的方式,因为 SQL 架构并不复杂,并且不需要安全和身份验证问题(它是一个原型)。

还有一个前端网页必须将这些数据可视化,因此这样的后端系统看起来是快速完成工作的好选择。

最后我看到了这个解决方案:

Is there a way to 'listen' for a database event and update a page in real time?

我的问题是,除了页面之外,我还想用来自 RESTful 服务器的消息更新客户端。

如果以上所有这些都是不必要的,并且更简单的客户端-服务器应用程序将证明更好且更简单,请告诉我。

提前谢谢你。

【问题讨论】:

    标签: java android mysql spring rest


    【解决方案1】:

    通常您应该将您的数据上传到服务器上的资源(例如POST /widgets 并且服务器应该立即返回201 Created 或(如果创建太慢并且需要稍后发生)202 Accepted 状态。那里发生这种情况后有几种方法,每种方法都有其优点:

    • 轮询 - 服务器的响应包括一个位置字段,然后客户端可以继续轮询该字段,直到发生更改(例如,每秒检查一次更新)。如果您有效地使用 HTTP 缓存并且平均检查次数相对较少,这是最简单的方法并且非常有效。
    • 推送通知 - 服务器在更改发生、生成报告等时发送推送通知。显然,这需要您存储客户端的详细信息及其通知要求。这可能是最干净的方法,也易于扩展。对于 Android(也包括 iOS),您可以通过 Google Cloud Messaging 获得免费的推送通知。
    • 在客户端和服务器之间建立持久连接,例如使用 Websocket 或低级 TCP 连接。这应该会产生最快的响应时间,但可能会消耗手机电池,更难在服务器上扩展,并且代码更复杂。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2016-03-19
      • 1970-01-01
      • 2021-03-18
      • 1970-01-01
      • 2020-03-22
      相关资源
      最近更新 更多