2

我请求从服务器下载文件。问题是文件是在服务器端生成的,并且生成是异步的。

最初我做了类似的事情

try { Thread.sleep(10000); } catch (Exception e) { //TODO }

然后我对新下载的文件做一些事情。

问题是生成文件有时需要 10 多秒,有时需要更少。所以我的“测试”会随机通过或失败。

我的第一次尝试是重复请求(每 1000 毫秒),直到我在服务器中找到文件并在 2 分钟后超时。但我认为这是一个非常糟糕的设计。

那么,等待文件生成然后下载的最佳方法是什么?

编辑:我使用 http 通信。

4

2 回答 2

1

除非你有某种方式来接收通知(就像亚马逊在后台工作中所做的那样),否则轮询几乎是你唯一能做的事情。

如果您所说的只是几秒钟(而不是几分钟或几小时),并且您控制服务器端,则可以在创建文件之前阻止请求处理。

于 2013-05-16T08:16:30.213 回答
1

那么阻塞 I/O 操作呢?

像这样的东西:

http://docs.oracle.com/javase/6/docs/api/java/io/InputStream.html

你如何与远程服务器通信?插座?HTTP?

为 HTTP 编辑:如果您还可以访问服务器端,您可以发送一个带有文件内容长度的 HTTP 标头,即使它没有被创建,所以客户端在实际创建之前被“连接”。也要小心超时。而且您还可以直接输出(传输)文件(而不是等待它完成),这将摆脱我猜的超时问题。

于 2013-05-16T08:17:03.513 回答