【问题标题】:Solution for Asynchronous Servlets in versions prior to 3.0?3.0 之前版本中异步 Servlet 的解决方案?
【发布时间】: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


【解决方案1】:

您可以实现 Reverse ajax 技术,这意味着您无需多次轮询以获得响应,而是在任务完成后获得响应。 有一个使用DWR here 来实现反向ajax 技术的快速解决方案。但是你应该保持静态列表的使用。如果您的后台任务业务逻辑很复杂,您可以使用 ESB 或更复杂的东西。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2011-06-15
    • 1970-01-01
    • 2017-02-19
    • 1970-01-01
    • 2017-02-09
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多