通过客户端触发Restful Server Response

时间:2015-09-30 22:55:38

标签: java android mysql spring rest

这个问题可能听起来有点抽象,回答(但我的搜索没有找到方便的答案)或者根本没有具体说明,但我会尝试提供尽可能多的信息。

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

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

一些评论:

我正在使用javaEE,带有hibernate和tomcat的Spring MVC(因为我以更异步的方式熟悉环境)。

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

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

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

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

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

如果以上所有内容都是必要的,更简单的客户端 - 服务器应用程序将证明更好,更简单,欢迎通知我。

提前谢谢。

1 个答案:

答案 0 :(得分:0)

通常,您应该将数据上传到服务器上的资源(例如POST /widgets,服务器应立即返回201 Created或(如果创建太慢,需要稍后进行){{ 1}}状态。在此之后有几种方法,每种方法都有其优点:

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