我想采取的态度是,如果我的服务器端太慢,只需抛出异常并将有意义的错误消息发送回客户端即可。我将这个时间限制任意设置为 5 秒,并会根据需要进行调整。
我看到 App EngineApiProxy.getCurrentEnvironment().getRemainingMillis()
提供了我们在抛出 aDeadlineExceedException
和超时之前剩下的毫秒数。
我想做类似的事情,但是对 GAE 的 60 秒限制施加我自己的 5 秒限制(同样,现在我选择 5 秒还是 40 秒并不重要,只要它们更严格比GAE强加的)。我想编写一个启动 5 秒计时器的服务器端处理程序/servlet。如果请求在该时间内没有返回,它会抛出异常并返回给客户端:
public class MyTimedServlet extends HttpServlet {
public void doGet(HttpServletRequest request, HttpServletResponse response)
throws IOException {
// Start 5-second timer
Timer timer = new Timer(5000);
try {
timer.start();
response = handleRequest(request);
}
catch(TimeException timerException) {
response = ResponseFactory.newTimeExceededResponse();
}
}
}
不幸的是,我在 GAE API 中看不到任何与Timer
我正在寻找的对象相似的东西。
我已经计划通过 对每个请求使用多线程ThreadManager.currentRequestThreadFactory().newRequestThread(...)
,所以我不想浪费其中一个(我一次只能得到 10 个!)线程来创建背景“定时器线程”,除非我绝对必须这样做。
所以我问:GAE 是否有这样的开箱即用的东西,如果我必须自己推出,我该怎么做?提前致谢!