簡體   English   中英

在Java Servlet中創建異步處理

[英]Creating an asynchronous processo in a java servlet

我想創建一個Java Servlet,該Java Servlet在服務器中運行.exe應用程序,但作為異步進程,並向客戶端返回哈希或令牌以標識該進程,以便客戶端稍后可以詢問進程是否已完成。

例如:

我知道我可以使用ProcessBuilder或Runtime.exec()來運行.exe應用程序,但是我不知道如何使servlet保持進程運行並響應。

謝謝!

問候,

tian田

ProcessBuilder返回的Process在后台異步運行(這是一個單獨的進程),因此,只要調用.start() ,就可以讓Servlet響應。

如果您看到子流程永遠不會完成,那是因為您沒有在讀取其輸出 ,必須執行該操作才能使該流程繼續。 您可能需要在單獨的后台線程中執行此操作。

這是實現此目的的方法之一:

  1. 創建一個執行命令(Runtime.exec等)的可運行對象(隨后將執行其他一些操作)
  2. 創建一個ID可以說一個UUID並根據持久性存儲上的ID初始化狀態來說PENDING
  3. 使用ThreadPoolExecutor,將可運行對象添加到分配給線程池的workQueue中。
  4. 當可運行程序開始執行時,它可能會將狀態數據庫中的狀態更改為IN_PROGRESS
  5. 任務完成后,您可以將狀態標記為“完成”

現在,在任何時候收到請求時,您都可以檢查任務的狀態並做出相應的響應。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM