web-services - 这是网络服务的良好候选者吗?

标签 web-services web-applications distributed

好吧,来自完全不同的软件开发领域,我遇到了一个有点超出我经验的问题。我将尽可能简单地说明,而不透露 secret 细节:

  1. 我想创建一个服务器,当同一网络上的客户端请求时,该服务器可以“执行某些操作”。客户端很可能是内容管理系统的后端。

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

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

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

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

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

最佳答案

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

简单的方法:

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

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

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

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

关于web-services - 这是网络服务的良好候选者吗?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/1464044/

相关文章:

asp.net - New-WebServiceProxy cmdlet 失败并出现 "The operation has timed out"异常

ios - 使用 WSDL 使用 SOAP WebService

c# - 在多个 Web 项目之间共享一个连接字符串

distributed - Raft集群中的日志索引和日志项变量是否可以无限增长?

python - supervisord 停止/启动所有进程但排除 X 和 Y 进程

java - 将一个JPPFTask分配给所有节点并比较结果

java - 无法在 Eclipse 中创建 GAE 实体

java - Android 的自然网络服务类型

java - 使用 Java 在 Linux 机器上获取主板序列号/ID 以防止盗版

javascript - 单击验证链接后,Firebase 将用户重定向到页面