我創建了一個App引擎後端爲長時間運行的進程提供http請求。當查詢引用小尺寸的輸入時,後端進程按預期工作,但當輸入尺寸很大時超時。查詢參數是App Engine BlobStore blob的url,後者是後端進程的輸入數據。我認爲使用App Engine後端的關鍵在於避免超時限制App Engine前端擁有。我怎樣才能避免超時?請求引擎後端計時
我把這樣的後端,設置連接超時長度無限:
HttpURLConnection connection = (HttpURLConnection)(new URL(url + "?" + query).openConnection()); connection.setRequestProperty("Accept-Charset", charset); connection.setRequestMethod("GET"); connection.setConnectTimeout(0); connection.connect(); InputStream in = connection.getInputStream(); int ch; while ((ch = in.read()) != -1) json = json + String.valueOf((char) ch); System.out.println("Response Message is: " + json); connection.disconnect();
(編輯匿名)回溯是:
Uncaught exception from servlet java.net.SocketTimeoutException: Timeout while fetching URL: http://my-backend.myapp.appspot.com/somemethod?someparameter=AMIfv97IBE43y1pFaLNSKO1hAH1U4cpB45dc756FzVAyifPner8_TCJbg1pPMwMulsGnObJTgiC2I6G6CdWpSrH8TrRBO9x8BG_No26AM9LmGSkcbQZiilhC_-KGLx17mrS6QOLsUm3JFY88h8TnFNer5N6-cl0iKA at com.google.appengine.api.urlfetch.URLFetchServiceImpl.convertApplicationException(URLFetchServiceImpl.java:142) at com.google.appengine.api.urlfetch.URLFetchServiceImpl.fetch(URLFetchServiceImpl.java:43) at com.google.apphosting.utils.security.urlfetch.URLFetchServiceStreamHandler$Connection.fetchResponse(URLFetchServiceStreamHandler.java:417) at com.google.apphosting.utils.security.urlfetch.URLFetchServiceStreamHandler$Connection.getInputStream(URLFetchServiceStreamHandler.java:296) at org.someorg.server.HUDXML3UploadService.doPost(SomeService.java:70) at javax.servlet.http.HttpServlet.service(HttpServlet.java:637)
正如你所看到的,我沒有收到DeadlineExceededException,所以我認爲Google的限制之外的東西導致超時,並且使這個問題與類似的stackoverflow帖子不同 話題。
我虛心地感謝你的任何見解。
更新2/19/2012:我想,看看發生了什麼。我應該可以讓客戶端使用GWT [或任何其他類型的客戶端異步框架]異步處理程序無限期地等待任何客戶端請求來完成,所以我不認爲這是問題所在。問題在於文件上傳正在調用_ah/upload App Engine系統端點,然後在blob存儲在Blobstore中之後)調用上傳服務的doPost後端來處理blob。客戶端對_ah/upload的請求是超時的,因爲後端不能及時返回。爲了讓這個超時問題消失,我試圖使_ah_upload服務本身成爲可通過http://backend_name.project_name.appspot.com/_ah/upload訪問的公共後端,但我認爲google不允許系統服務(如_ah/upload)作爲後端運行。現在我的下一個方法是在觸發後端處理後立即返回ah_upload,然後在處理完成後調用另一個服務以獲取我想要的原始響應。
你是從前端實例的後端獲取?如果是這樣,那麼我想這是前端超時,而不是後端。如果是這種情況,請嘗試將後端公開並直接訪問處理程序(正如您根據引用中的URL所做的那樣)。 – 2013-02-13 17:54:58
保羅,請求來自公共後端,我也運行。我最初的請求來自前端,但懷疑這是問題所在,所以我將它移到了後端。我停止接收嚴格的截止日期例外,但仍然得到這些超時。 – elmor 2013-02-13 17:58:54
然後我不知道,我在Python方面工作,所以我不能進一步進展,我害怕。只要你沒有觸發請求,然後通過前端實例在任何級別等待響應(即你應該只是通過一個處理程序來檢查更新,該處理程序只是立即返回狀態,而不管後端作業狀態如何),那麼我'茫然。 – 2013-02-13 18:04:53