2013-05-16 36 views
2

我請求從服務器下載文件。 事情是在服務器端生成文件,並且生成是異步的。等待從尚未創建的服務器下載文件的最佳方式?

起初,我不喜歡的東西

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

,然後我做新下載的文件的東西。

問題有時需要10多秒才能生成文件,有時需要更少的時間。所以我的「測試」會隨機通過或失敗。

我的第一次嘗試,直到我發現在服務器中的文件,並有超時說2分鐘後,執行多次要求(每1000個米利斯)。但我認爲這是非常糟糕的設計。

那麼,等待文件生成並下載它的最佳方式是什麼?

編輯:我使用http通信。

+0

在我看來,你應該創建後臺作業來獲取文件。我必須做同樣的事情。 – Ajit

回答

1

阻塞I/O操作怎麼樣?

事情是這樣的:

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

你如何與遠程服務器進行通信?插座? HTTP?

編輯HTTP: 如果您也可以訪問服務器端,您可以發送一個帶有文件內容長度的HTTP標頭,即使它沒有被創建,所以客戶端被「連接」創建。還要小心超時。你也可以直接輸出(傳輸)文件(而不是等待它完成),這將消除我猜想的超時問題。

+0

HTTP ..我只是嘗試做一個請求,並在服務器端重複檢查,看看是否創建文件,所以仍然不知道要走的路。 – Fofole

+0

你也有權訪問代碼服務器端嗎? – Maresh

+0

是的。我也控制了服務器。 – Fofole

1

除非您有辦法接收通知(如亞馬遜對其後臺作業),否則輪詢幾乎是您可以做的唯一事情。

如果只是你正在談論(而不是數分鐘或數小時)秒,並把控制服務器側,可以有請求處理塊直到創建該文件。

相關問題