gpt4 book ai didi

java - 您将如何为 servlet 请求提供 X 秒内的返回语义?

转载 作者:行者123 更新时间:2023-12-03 12:57:16 27 4
gpt4 key购买 nike

如果有东西要返回,我的客户希望我的 servlet 能够在 X 秒内返回结果,否则返回 zt X 秒并带有“抱歉无法在指定时间内返回”之类的消息

这实际上是对带有超时的 servlet 的同步调用。这种行为是否有既定的模式?

这样做的理想方法是什么?

最佳答案

请求处理程序线程创建一个 BlockingQueue调用 myQueue 并将其提供给一个工作线程,该线程将在完成时将其结果放入队列中。然后处理程序线程调用“myQueue.poll(X, TimeUnit.SECONDS)”并返回序列化结果,如果它得到一个,或者你的“超时”错误,如果它改为空(意味着“轮询”调用超时)。下面是它的外观示例:

// Servlet handler method.
BlockingQueue<MyResponse> queue = new ArrayBlockingQueue<MyResponse>();
Thread worker = new Thread(new MyResponseGenerator(queue));
worker.start();
MyResponse response = queue.poll(10, TimeUnit.SECONDS);
if (response == null) {
worker.interrupt();
// Send "timeout" message.
} else {
// Send serialized response.
}

请注意,线程管理通常(尤其是在 servlet 容器中)充满陷阱,因此在生产系统中使用此模式之前,您应该非常熟悉特定 servlet 容器的 servlet 规范和行为。

使用 ThreadPool 是另一个需要考虑的选项,但会增加另一层复杂性。

关于java - 您将如何为 servlet 请求提供 X 秒内的返回语义?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/4858179/

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