好吧,来自完全不同的软件开发领域,我遇到了一个有点超出我经验的问题。我将尽可能简单地说明,而不透露 secret 细节:
我想创建一个服务器,当同一网络上的客户端请求时,该服务器可以“执行某些操作”。客户端很可能是内容管理系统的后端。
请求由一些参数、一个输入文件和几个输出文件组成。
文件非常大,必须处理的数据从 10MB 到 100MB(可能更多)。客户端可以指定输出文件的目的地。
客户端需要能够找出请求的状态 - 例如在队列中的位置、完成百分比。显然,何时何地获取输出。
所以,我的问题是 - 客户端和服务器通信的好方法是什么?客户端应该轮询服务器,还是以某种方式提供“回调”以进行状态更新?
此时,实现平台是完全开放的 - 从 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/