Google app engine 请求应用程序引擎后端超时

Google app engine 请求应用程序引擎后端超时,google-app-engine,backend,Google App Engine,Backend,我创建了一个应用引擎后端,为长时间运行的进程提供http请求。当查询引用较小的输入时,后端进程按预期工作,但当输入较大时超时。查询参数是App Engine BlobStore blob的url,它是后端进程的输入数据。我认为使用应用程序引擎后端的全部目的是避免应用程序引擎前端所具有的超时限制。如何避免超时 我这样调用后端,将连接超时长度设置为无限: HttpURLConnection连接=HttpURLConnectionnew URLurl+?+query.openConnection;

我创建了一个应用引擎后端,为长时间运行的进程提供http请求。当查询引用较小的输入时,后端进程按预期工作,但当输入较大时超时。查询参数是App Engine BlobStore blob的url,它是后端进程的输入数据。我认为使用应用程序引擎后端的全部目的是避免应用程序引擎前端所具有的超时限制。如何避免超时

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

HttpURLConnection连接=HttpURLConnectionnew URLurl+?+query.openConnection; connection.setRequestPropertyAccept-Charset,Charset; connection.setRequestMethodGET; connection.setConnectTimeout0; 连接,连接; InputStream in=connection.getInputStream; int-ch; 而ch=in.read!=-1. json=json+String.valueOfchar-ch; System.out.printlnResponse消息为:+json; 连接。断开;

为匿名而编辑的回溯为:

来自servlet的未捕获异常 java.net.SocketTimeoutException:获取URL时超时:http://my-backend.myapp.appspot.com/somemethod?someparameter=AMIfv97IBE43y1pFaLNSKO1hAH1U4cpB45dc756FzVAyifPner8_TCJbg1pPMwMulsGnObJTgiC2I6G6CdWpSrH8TrRBO9x8BG_No26AM9LmGSkcbQZiilhC_-KGLx17mrS6QOLsUm3JFY88h8TnFNer5N6-cl0iKA 位于com.google.appengine.api.urlfetch.URLFetchServiceImpl.convertApplicationExceptionURLFetchServiceImpl.java:142 位于com.google.appengine.api.urlfetch.URLFetchServiceImpl.fetchURLFetchServiceImpl.java:43 位于com.google.apphosting.utils.security.urlfetch.URLFetchServiceStreamHandler$Connection.fetchResponseURLFetchServiceStreamHandler.java:417 位于com.google.apphosting.utils.security.urlfetch.URLFetchServiceStreamHandler$Connection.getInputStreamURLFetchServiceStreamHandler.java:296 位于org.someorg.server.hudml3uploadservice.doPostSomeService.java:70 位于javax.servlet.http.HttpServlet.serviceHttpServlet.java:637

正如你所看到的,我没有得到DeadLineExceedexception,所以我认为谷歌的限制之外的其他因素导致了超时,这也使得这个问题与类似的stackoverflow主题帖子不同

我谦虚地感谢你的见解


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

解决方案是将后端进程作为任务启动,并将其添加到任务队列中,然后在客户端等待处理后端任务之前向其返回响应,这可能需要很长时间。如果我可以将ahu upload分配到后端,这也解决了问题,因为clien't async处理程序可以永远等待后端完成,但我认为Google不允许将系统servlet分配到后端。正如Paul C所提到的,客户端现在必须轮询持久化的后端进程响应数据,因为任务不能像普通servlet那样响应。

您是从后端从前端实例获取数据吗?如果是这样的话,我想是前端超时了,而不是后端。如果是这样的话,那么尝试将后端公开,并直接访问处理程序,就像您根据trackback中的URL所做的那样。Paul,请求来自一个公共后端,我也在运行该后端。我最初的请求来自前端,但怀疑这就是问题所在,所以我将其移动到后端。我不再收到硬性的截止日期异常,但仍然收到这些超时。然后我不知道,我在python方面工作,所以我恐怕不能再前进了。只要您没有触发请求,然后在任何级别通过前端实例等待响应,即您应该通过处理程序检查更新,不管后端作业状态如何,处理程序都会立即返回状态,那么我就不知所措。好的,也许这就是问题所在。我有一个GWT客户端在前端上传程序pr上
等待这一切结束的过程。我认为这是一个异步GWT上传服务。我会更仔细地看一看,很快会添加更多的细节。那就到此为止。当您的后端作业完成时,将一个值放入memcache,并使用前端检查该值或数据存储以获得更高的安全性,当然,不要等待任何级别的任何后端进程直接在任何类型的处理程序中运行,只需触发它们,然后返回或检查状态更新并返回即可。