等待从尚未创建的服务器下载文件的最佳方式?
问题描述:
我请求从服务器下载文件。 事情是在服务器端生成文件,并且生成是异步的。等待从尚未创建的服务器下载文件的最佳方式?
起初,我不喜欢的东西
try { Thread.sleep(10000); } catch (Exception e) { //TODO }
,然后我做新下载的文件的东西。
问题有时需要10多秒才能生成文件,有时需要更少的时间。所以我的“测试”会随机通过或失败。
我的第一次尝试,直到我发现在服务器中的文件,并有超时说2分钟后,执行多次要求(每1000个米利斯)。但我认为这是非常糟糕的设计。
那么,等待文件生成并下载它的最佳方式是什么?
编辑:我使用http通信。
答
阻塞I/O操作怎么样?
事情是这样的:
http://docs.oracle.com/javase/6/docs/api/java/io/InputStream.html
你如何与远程服务器进行通信?插座? HTTP?
编辑HTTP: 如果您也可以访问服务器端,您可以发送一个带有文件内容长度的HTTP标头,即使它没有被创建,所以客户端被“连接”创建。还要小心超时。你也可以直接输出(传输)文件(而不是等待它完成),这将消除我猜想的超时问题。
答
除非您有办法接收通知(如亚马逊对其后台作业),否则轮询几乎是您可以做的唯一事情。
如果只是你正在谈论(而不是数分钟或数小时)秒,并把控制服务器侧,可以有请求处理块直到创建该文件。
在我看来,你应该创建后台作业来获取文件。我必须做同样的事情。 – Ajit