【问题标题】:Creating an asynchronous processo in a java servlet在 java servlet 中创建异步进程
【发布时间】:2018-02-27 18:35:39
【问题描述】:

我想创建一个 java servlet,它在服务器中运行一个 .exe 应用程序,但作为一个异步进程,并向客户端返回一个哈希或令牌以标识该进程,以便客户端稍后可以询问该进程是否已完成。

例如:

我知道我可以使用 ProcessBuilder 或 Runtime.exec() 来运行 .exe 应用程序,但我不知道如何让 servlet 让进程保持运行并做出响应。

谢谢!

问候,

西安

【问题讨论】:

    标签: java asynchronous servlets process token


    【解决方案1】:

    ProcessBuilder 返回的Process 在后台异步运行(它是一个单独的进程),所以只要你调用.start(),你就可以让 servlet 响应。

    如果您看到子流程永远不会完成,那是因为您没有阅读它的output,您必须这样做才能使流程继续。您可能希望在单独的后台线程中执行此操作。

    【讨论】:

      【解决方案2】:

      这是实现它的方法之一:

      1. 创建一个可执行命令(Runtime.exec 等)的可运行文件(随后会执行一些其他操作)
      2. 创建一个 id 让我们说一个 UUID 并根据持久存储上的 id 初始化状态以说 PENDING
      3. 使用 ThreadPoolExecutor,将 runnable 添加到分配给线程池的 workQueue 中。
      4. 当 runnable 开始执行时,它可能会将 say DB 中的状态更改为 IN_PROGRESS
      5. 任务完成后,您可以将状态标记为 COMPLETE

      现在,在任何时候收到请求,您都可以检查任务的状态并做出相应的回应。

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 2010-10-30
        • 2017-02-09
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多