等待从尚未创建的服务器下载文件的最佳方法?

时间:2013-05-16 08:14:39

标签: java asynchronous client-server

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

最初我做过像

这样的事情

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

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

问题有时需要10秒以上才能生成文件,有时需要的时间更少。所以我的“测试”将随机传递或失败。

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

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

编辑:我使用http通讯。

2 个答案:

答案 0 :(得分:1)

除非您有某种方式接收通知(例如亚马逊为其后台工作做的事),否则轮询几乎是您唯一可以做的事情。

如果只是几秒钟(而不是几分钟或几小时),并且您控制服务器端,您可以拥有请求处理块,直到创建文件。

答案 1 :(得分:1)

阻塞I / O操作怎么样?

这样的事情:

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

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

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