gpt4 book ai didi

java - 如何施加 Google App Engine 的 DeadlineExceededException?

转载 作者:行者123 更新时间:2023-11-30 11:39:15 32 4
gpt4 key购买 nike

我想采取的态度是,如果我的服务器端太慢,则抛出异常并向客户端发回有意义的错误消息。我任意将此时间限制设置为 5 秒,并将根据需要进行调整。

我看到 App Engine 有 ApiProxy.getCurrentEnvironment().getRemainingMillis(),它为我们提供了在它抛出 DeadlineExceedException 并计时我们之前剩余的毫秒数出。

我想做类似的事情,但是将我自己的 5 秒限制强加于 GAE 的 60 秒限制(同样,现在我选择 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 个!)线程来创建后台“Timer Thread”,除非我绝对必须这样做。

所以我问:GAE 是否有这样的开箱即用的东西,如果我必须自己推出,我该怎么做呢?提前致谢!

最佳答案

代码中的任何异步任务(不遵循正常流程)都涉及新线程执行,在本例中,此任务是计算时间。

但是您可以使用类 Timer & TimerTask它们都包含在 App-Engine JRE 白名单中。

示例代码:未经测试,仅供引用。

public class YourServlet extends HttpServlet {

Timer timer;
HttpServletResponse response;

@Override
protected void doGet(HttpServletRequest request, HttpServletResponse response)...{
int seconds = 5;
timer = new Timer();
timer.schedule(new DeadLine(), seconds * 1000);

/* the rest of your code here */
}

class DeadLine extends TimerTask {
public void run() {
response.getWriter().print("Error: deadline reached.");
}
}
}

阅读这篇关于 job scheduling in Java, 的文章了解更多信息。

关于java - 如何施加 Google App Engine 的 DeadlineExceededException?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/13351563/

32 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com