【问题标题】:Create a webservice that connects to another webservice every hour to update my DB创建一个网络服务,每小时连接到另一个网络服务以更新我的数据库
【发布时间】:2013-02-18 00:33:21
【问题描述】:

我想为我的 Android 手机创建一个天气应用程序,但现在我卡在了应用程序的后端部分。

我找到了一个气象服务,我可以通过他们的网络服务免费获取某个位置的详细信息。但是他们在他们的规则中已经声明不允许我频繁地轮询他们的服务。所以我想我可以自己创建一个网络服务,从我找到的气象站中检索天气信息,然后通过我的网络服务使其可用,这样我的应用程序就只调用我的服务。

通信如下所示

MyApp MyWebService 商业网络服务

android 应用程序与 MyWebService 对话。我的网络服务与商业服务对话。

所以我想让 MyWebService 做一些事情。

  1. 每小时从商业网络服务中检索一次信息并更新我的数据库
  2. 处理来自我的 androidApp 的请求

我的问题是我对 Web 应用程序和 Web 服务知之甚少。我真的不知道为网络服务选择什么语言。 带有soap 或REST 的PHP 看起来是第二个任务的不错选择。但我找不到任何关于如何处理第一个任务的样本。有没有简单的方法告诉服务器每小时运行一次我的脚本? 我也一直在研究 C#,这会更适合我,因为我更习惯 C#。但同样的问题出现在这里。如何处理第二个任务?

这是我想写很久的东西,但我在这里完全迷失了。

【问题讨论】:

  • 在您的服务器上,您可能需要 两个 应用程序,共享一个数据库。 Web 服务应用程序将处理数据请求并使用数据库中的当前内容进行响应。第二个应用程序是后端脚本、控制台应用程序、Windows 服务、某种轮询供应商服务并更新数据库的计划任务。

标签: web-services web-applications programming-languages webserver


【解决方案1】:

出于多种原因,从纯 Web 应用程序“每小时一次”(或更一般地,调度任务)执行操作非常棘手。一般来说,使用操作系统的内置机制来执行计划任务(例如 Linux 下的 cron 或 Windows 下的 Scheduled Tasks)要好得多,或者编写一个处理更新的服务/守护进程。

话虽如此,有一种相当简单的方法可以满足您的要求。您可以在您的 Web 应用程序层中缓存商业 Web 服务的结果,以及您上次检索信息的时间戳。当 Web 请求从您的应用程序进入您的 Web 服务时,首先检查缓存的时间戳。如果时间戳小于一小时,则只返回缓存的天气数据。如果时间戳超过一个小时,则直接从那里调用商业网络服务,将结果和当前时间写入缓存,并将刚刚获取的数据返回到应用程序。

PHP 确实非常适合这种任务。有关如何执行此操作的详细说明超出了 Stack Overflow 问题的范围。谷歌 PHP 和缓存,尝试一些示例,如果遇到困难,请询问详细的后续问题。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2011-12-26
    • 2013-10-20
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多