我发出了从服务器下载文件的请求。 问题是在服务器端生成文件,生成是异步的。
最初我做过像
这样的事情 try {
Thread.sleep(10000);
} catch (Exception e) {
//TODO
}
然后我对新下载的文件做了一些事情。
问题有时需要10秒以上才能生成文件,有时需要的时间更少。所以我的“测试”将随机传递或失败。
我的第一次尝试是重复请求(每1000毫秒),直到我在服务器中找到该文件并在说2分钟后超时。但我认为这是非常糟糕的设计。
那么,等待文件生成然后下载的最佳方法是什么?
编辑:我使用http通讯。
答案 0 :(得分:1)
除非您有某种方式接收通知(例如亚马逊为其后台工作做的事),否则轮询几乎是您唯一可以做的事情。
如果只是几秒钟(而不是几分钟或几小时),并且您控制服务器端,您可以拥有请求处理块,直到创建文件。
答案 1 :(得分:1)
阻塞I / O操作怎么样?
这样的事情:
http://docs.oracle.com/javase/6/docs/api/java/io/InputStream.html
您如何与远程服务器通信?插座? HTTP?
编辑HTTP: 如果您也可以访问服务器端,那么您可以发送一个带有文件内容长度的HTTP标头,即使它没有创建,因此客户端在实际创建之前会“连接”。也要小心超时。你也可以直接输出(传输)文件(而不是等待它完成),这样就可以摆脱我猜测的超时问题。