这是一个很好的网络服务候选人吗?

时间:2009-09-23 04:58:24

标签: web-services web-applications distributed

好的,从一个完全不同的软件开发领域进入,我遇到了一个问题,这与我的经验有点不同。我会在没有透露机密细节的情况下尽可能明白地说明:

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

  2. 请求包含一些参数,输入文件和多个输出文件。

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

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

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

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

2 个答案:

答案 0 :(得分:4)

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

简单的方法:

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

稍微复杂的方法,没有投票。

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

为了获得额外的弹性,你可以保留GetProcessStatus以防万一在以太网中丢失...

答案 1 :(得分:2)

对于Web服务而言,高达100MB的文件不是一个好的选择,因为在完成处理之前,您可能会遇到HTTP会话超时的风险。

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