【问题标题】:Can I check if an async request completed?我可以检查异步请求是否完成?
【发布时间】:2013-03-16 06:54:24
【问题描述】:

有什么方法可以检查异步 ServletRequest 是否从 AsyncContext 完成?我看到 spring 有某种wrapper that supports this 但在谷歌上搜索我在标准库中找不到任何东西。这就是我所希望的。

我正在使用 Tomcat 7。

【问题讨论】:

    标签: java servlets asynchronous httprequest httpresponse


    【解决方案1】:

    听起来像是两者之一 - 您要么需要一个 listener,它会在 异步请求 完成时被调用,要么您不需要使用 异步调用

    你的问题有点笼统。

    一般说 - 异步调用在调用者对调用的即时结果不感兴趣时​​使用。 如果调用者有兴趣立即知道调用的结果,那么应该使用同步调用。 如果调用者不想立即知道结果(例如它具有次要优先级,例如登录某些业务应用程序),但应该在 异步调用 执行结束时执行一些操作,您应该使用某种监听器

    异步调用需要一些侦听器(属于 javax.servlet.AsyncListener 类)。

    listener 中,您将确定 异步调用 已结束(onComplete 方法)并可能执行一些操作来完成/补充 异步调用


    同样,如果您看到请求的调用者需要在完成后立即知道结果,那么您的架构中可能存在错误。您应该使用同步调用 - 只需等到调用完成,您就会得到它的结果。在这种情况下使用异步调用是错误的。


    我看到人们如何使用某种循环来不时检查异步调用的结果,但在 99.99% 的情况下,这种方法似乎是某种架构的结果错误。

    【讨论】:

      【解决方案2】:

      你可以注册AsyncListener,它可以实现onComplete()方法。

      AsyncListener 需要添加到 AsyncContext。

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2015-08-14
        • 1970-01-01
        • 2015-11-26
        • 2020-11-06
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多