首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >对App Engine后端的请求超时

对App Engine后端的请求超时
EN

Stack Overflow用户
提问于 2013-02-14 01:47:49
回答 1查看 1.4K关注 0票数 1

我创建了一个App Engine后端来为一个长时间运行的进程服务http请求。当查询引用小尺寸的输入时,后端进程会按预期工作,但当输入尺寸较大时,会超时。查询参数是App Engine BlobStore blob的url,它是后端进程的输入数据。我认为使用App Engine后端的全部意义在于避免App Engine前端所具有的超时限制。如何避免超时?

我像这样调用后端,将连接超时长度设置为无限:

代码语言:javascript
复制
 `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();` 

回溯(为了匿名而编辑)是:

代码语言:javascript
复制
 `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,所以我认为除了谷歌的限制之外,还有其他原因导致了超时,这也使得这个问题不同于关于这个主题的类似的stackoverflow帖子。

我谦虚地感谢你的见解。

2012年2月19日更新:我想我知道发生了什么。我应该能够让客户端使用GWT或任何其他类型的客户端异步框架异步处理程序无限期地等待any客户端请求完成,所以我不认为这是问题所在。问题是文件上传会调用_ah/upload App Engine系统终结点,一旦blob存储在Blobstore中,该终结点就会调用上传服务的doPost后端来处理blob。客户端对_ah/upload的请求是超时的,因为后端没有及时返回。为了解决这个超时问题,我尝试让_ah_upload服务本身成为一个可通过http://backend_name.project_name.appspot.com/_ah/upload访问的公共后端,但我不认为谷歌允许系统服务(如_ah/upload)作为后端运行。现在,我的下一种方法是在触发后端处理后立即返回ah_upload,然后在处理完成后调用另一个服务来获得我想要的原始响应。

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2013-02-20 22:44:43

解决方案是启动一个后端进程作为任务,并将其添加到任务队列中,然后在客户端等待处理后端任务之前向客户端返回响应(这可能需要很长时间)。如果我可以将ah_upload分配给后端,这也可以解决问题,因为客户端的异步处理程序可以永远等待后端完成,但我认为谷歌不允许将系统Servlets分配给后端。

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/14859746

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档