【问题标题】:Is this a good canditate for a web-service?这是一个很好的网络服务候选人吗?
【发布时间】:2009-09-23 04:58:24
【问题描述】:

好吧,我来自一个完全不同的软件开发领域,但我遇到的问题有点出乎我的经验。我会在不透露机密细节的情况下尽可能清楚地陈述:

  1. 我想创建一个服务器,当同一网络上的客户端请求时,它可以“做事”。客户端很可能是内容管理系统的后端。

  2. 请求由一些参数、一个输入文件和几个输出文件组成。

  3. 文件非常大,必须处理 10MB 到 100MB 的数据(可能更多)。客户端可以指定输出文件的目的地。

  4. 客户端需要能够找出请求的状态 - 例如队列中的位置、完成百分比。很明显,何时何地获取输出。

所以,我的问题是 - 客户端和服务器通信的好方法是什么?客户端应该轮询服务器,还是以某种方式为状态更新提供“回调”?

此时,实现平台是完全开放的——从 C 到像 Ruby 这样的脚本语言都可以使用(在任一端),我的主要问题是应该如何进行通信。

【问题讨论】:

    标签: web-services web-applications distributed


    【解决方案1】:

    首先想到的是,在机器之间设置一些网络服务。但是对于大文件,Web 服务不会太友好或高效。

    简单的方法:

    • ServerA 在ServerB“BeginProcess”上点击了一个Web 方法。响应会返回 FTP 位置用户名/密码和票证号。
    • ServerA 将文件传送到 FTP 位置。
    • ServerA 定期轮询网络方法“GetProcessStatus(ticketNumber)”,可能的返回值:等待文件、完成百分比、已完成

    稍微复杂一点的方法,没有轮询。

    • ServerA 在 ServerB “BeginProcess(postUrl)”上点击一个 Web 方法,然后您发送一个您希望将状态更新发布到的 URL。响应:FTP 位置用户名/密码和票号。
    • ServerA 将文件传送到 FTP 位置。
    • ServerB 每完成 XXX% 就将更新发送到 ServerA 上的 POST 位置。

    为了获得额外的弹性,您将保留 GetProcessStatus 以防万一某些东西在以太中丢失...

    【讨论】:

      【解决方案2】:

      最大 100MB 的文件对于 Web 服务来说不是一个好的选择,因为在完成处理之前您会面临 HTTP 会话超时的风险。

      拥有一个用于检查这些作业状态的网络服务会更理想。通过 FTP 或您选择的任何文件传输方法处理文件传输,并轮询网络服务以获取状态更新。该过程完成后,您可能会返回一个可以下载的输出文件 url。

      【讨论】:

      • 如果存在会话超时的风险,为什么不 (a) 使文件传输不需要会话; (b) 延长会话超时时间。
      猜你喜欢
      • 2014-04-08
      • 2017-08-28
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2015-01-04
      • 2015-05-09
      相关资源
      最近更新 更多