0
我正在開發一個安靜的Web服務,部署在Glassfish 4中,並使用Netbeans和Jersey進行Java編程,可以有很長的執行時間(有些情況下需要4-5分鐘)。爲了保持用戶不更新操作並防止瀏覽器發生超時錯誤,我決定啓動處理請求的主線程,並返回一個重定向到另一個靜默網頁的html頁面,該網頁測試請求是否爲略有延遲完成。Restful Web服務中的異步多線程
問題是第一個web服務在返回html響應之前等待線程完成,所以線程幾乎沒用。有什麼辦法可以繞過嗎?
下面是這個第一個服務:
@GET
@Produces("text/html")
public String getXml(@QueryParam("id") String id) {
Random rand=new Random((new Date()).getTime());
long clientId=rand.nextLong();
MainTestingThread mtt=new MainTestingThread(id,clientId);
mtt.run();
return "<!DOCTYPE html><html><head><meta HTTP-EQUIV=\"refresh\" CONTENT=\"10;URL=/checkstatus?clientid="+clientId+"\"/></head><body>Analysis Started and your clientID is \""+clientId+"\".<br/>Please wait...</body></html>";
}
感謝和抱歉,如果我錯過了任何信息,但我非常新的Web服務。
您是否考慮過使用異步調用? https://jersey.java.net/documentation/latest/async.html。它是長期通話的內置機制。 – jjd
我對網絡服務很新,所以我不知道里面有內置的機制......謝謝,我會檢查出來。 – user3653054