代码之家  ›  专栏  ›  技术社区  ›  Leonardo

如何构建耗时的Web服务

  •  4
  • Leonardo  · 技术社区  · 15 年前

    一个简单而理论的问题,答案可能是一个,但我想听听一些意见和建议。我需要实现一个Web服务(Java),它将启动一个耗时的过程,它将解析一些输入文件并做DoM DB工作人员。

    最好的方法是什么让用户知道整个过程不仅开始了,而且结束了,通过解析,更新数据库…因为我不能挂起用户等待整个过程完成。

    注意:用户在启动进程之前已经过身份验证。

    编辑:Web服务不仅可以通过Web浏览器访问,而且只要客户引用WSDL,他们就可以使用任何用他们想要的语言构建的客户机访问它。

    谢谢

    2 回复  |  直到 15 年前
        1
  •  6
  •   Roshan Amadoru    15 年前

    对于您的场景,您应该实现异步Web服务。对于异步Web服务,您有两个选项。

    1. (正如前面提到的)您可以对服务进行轮询,以查看进程是否完成。
    2. 您可以要求服务器回拨

    第一种方法易于实现,并且可以与许多WS-Library一起使用。但是,这也带来了一个缺点,即服务器必须为客户机的轮询请求浪费带宽。毕竟,这是投票。大多数时候,投票是个坏主意。

    后者不如前者简单易用。我不知道每个JAX-WS库是否都支持它。为了支持你,我做了一个快速的谷歌搜索,找到了这个链接。

    http://www.developer.com/java/web/article.php/3863416/Using-Axis2-and-Java-for-Asynchronous-Web-Service-Invocation-on-the-Client-Side.htm

    那可能对你有点帮助。

        2
  •  4
  •   Greg B    15 年前

    当用户提交数据时,我会给他们一个令牌,并让他们使用令牌(异步)轮询到另一个方法。

    然后,在第一个方法中,我将把数据添加到一个队列中,让另一个进程在服务器上运行,检查该队列并执行处理。然后更新数据库中的令牌,通知用户其作业已完成。

    我以前做过类似的工作,发现在基于HTTP/Web的系统上触发一个长时间运行的进程是一个坏主意,因为底层系统经常会超时对长时间运行的WebService的调用。