0

我有一個託管在Google App Engine(GAE)上的Java Web應用程序。用戶點擊一個按鈕,他得到一個100行的數據表。在頁面的底部,有一個「Make Web service calls」按鈕。點擊它,應用程序將一次一行,並使用URLConnection類進行第三方Web服務調用。那部分工作正常。Google App Engine - http請求/響應

但是,由於HttpRequest/Response週期有60秒的限制,所有100個事務都沒有經過,因爲超時發生在50行左右。

如何創建循環併發送Web服務調用,而用戶不必單擊「創建Web服務調用」多次?

有沒有辦法在60秒前停止循環,然後再次啓動而不提交HttpResponse? (我不想使用異步Google後端)。

此外,沒有GAE支持文件上傳(獲取某個文件,而不是數據庫中的100行)

謝謝。

添加一些代碼爲每個評論:

URL url = new URL(urlString); 

HttpURLConnection connection = (HttpURLConnection) url 
         .openConnection(); 
       connection.setDoOutput(true); 
       connection.setRequestMethod("POST"); 
       connection.setConnectTimeout(35000); 
       connection.setRequestProperty("Accept-Language", "en-US,en;q=0.5"); 
       connection.setRequestProperty("Authorization", encodedCredentials); 

       // Send post request 
       DataOutputStream wr = new DataOutputStream(
         connection.getOutputStream()); 
       wr.writeBytes(submitRequest); 
+0

您可以發佈它做HTTP連接的現行規範? –

+0

@DevilingMaster更新了代碼 – user972391

回答

1

這一切都取決於這些調用的結果發生。

如果結果沒有返回到UI,則無需阻止它。您可以使用任務API創建100個任務並向用戶返回響應。這最多需要幾秒鐘。額外的好處是你可以通過使用任務並行地完成10個呼叫。

如果結果必須返回給用戶,您仍然可以使用最多10個線程儘可能並行地處理儘可能多的請求。希望這會使你的時間在1分鐘以內,但你不能保證,因爲你依賴於第三方資源的反應,而這些資源目前可能不可用。你將不得不實現你自己的重試機制。

另請注意,用戶不習慣等待幾分鐘的時間讓網站回覆。在處理最後一個請求之後通知用戶而不會阻止您的客戶端代碼時,您可以考慮使用不同的方法。

是的,您可以從App Engine上的文件加載數據。

+0

是的,我需要顯示結果給用戶。你有鏈接到任何線程中的任務的例子嗎?只有後端程序不是任務嗎? GAE前端還可以使用任務嗎? – user972391

+0

默認情況下,任務將定位您的常規(前端)實例。如果你想讓它們在那裏執行,你必須指定後端。至於線程,如果您使用任務,則不必執行任何操作 - 只需將您的應用配置爲線程安全,並配置隊列(https://cloud.google.com/appengine/docs/java/config/queue) –

0

嘗試使用asynchronous urlfetch電話:

LinkedList<Future<HttpResponse>> futures; 

// Start all the request 
for (Url url : urls) { 
    HttpRequest request = new HttpRequest(url, HTTPMethod.POST); 
    request.setPayload(...) 
    futures.add(urlfetchservice.fetchAsync(request); 
} 

// Collect all the results 
for (Future<HttpResponse> future : futures) { 
    HttpResponse response = future.get() 
    // Do something with future 
} 
+0

我的應用程序是一個Java應用程序(不是Python) – user972391

+0

@ user972391- GAE Java API也有一個[異步API](https://cloud.google.com/appengine/docs/java/javadoc/com/google/appengine/ API /網址擷取/ URLFetchService#fetchAsync(com.google.appengine.api.urlfetch.HTTPRequest))。 –

+0

@ user972391 - 針對Java運行時更新。 –