【发布时间】:2012-06-05 23:44:03
【问题描述】:
我有一个长时间运行的任务(报告),它会在开始返回数据之前超过任何 TCP 连接超时。异步 servlet(在 Servlets 3.0 中引入)正是我所需要的,但是我仅限于 Servlet v2.4。 有没有“自己动手”的解决方案?我正在做的事情感觉被黑了——我在一个线程中异步启动任务,然后立即返回客户端。然后客户端每隔几秒轮询一次(使用 ajax),并检查此任务 ID 的“就绪”状态(静态列表维护它们的状态和线程处理的对象的一些句柄)。准备好后,我将输出流注入工作对象,以便线程可以将结果写回客户端。
【问题讨论】:
-
使用异步 servlet 只会将 servlet 线程返回到线程池。但是网络连接资源仍然是“消耗”的,因为它一直保持打开状态,直到响应被发回。异步 Servlet 真的就像拥有第二个 servlet 线程池,您可以选择性地将工作放入其中。goo.gl/dbmpc
标签: java servlets asynchronous