2014-10-27 323 views
1

異步發送響應需要以下功能添加到我的春節,啓動基於REST的應用:在春季啓動

當POST方法被調用時,一個長期運行的進程已經啓動。按照固定的時間間隔(每5秒左右),我需要在瀏覽器中向用戶顯示一條消息,直到過程結束。

注意:此方法可能不只是從瀏覽器調用。將來可能會從shell腳本中調用。目標是在「響應主體」中間歇性地發送響應。

我嘗試添加如下代碼:

    OutputStream os = response.getOutputStream(); 
        os.write(msg.getBytes()); 
        os.flush(); 

,但得到空指針異常而沖洗。

我該怎麼做?我必須做一個AJAX調用或類似的東西嗎?

+0

是您的'長時間運行的過程'是否啓動,因爲不同的線程和響應立即提交? – 2014-10-27 07:01:25

+0

不,它不是以不同的線程和響應啓動的。 – DilTeam 2014-10-27 07:15:46

回答

3

這裏有幾個問題。最根本的是,HTTP並不旨在向單個請求發送多個響應。其次,在長時間運行的過程中阻塞請求處理線程可能會導致問題。

更好的方法是在啓動長時間運行的過程後立即發送響應。此響應將包含202 Accepted狀態代碼和Location標頭,該標頭提供了另一個可由客戶端輪詢的URI,以獲取有關長時間運行的任務的信息。例如:Location: https://yourapi.example.com/tasks/123456。客戶有責任對此任務URI執行GET請求,以獲取有關長時間運行進程的進度的信息。

+0

嗨,我也需要同樣的東西。我發送一個請求來獲得10個部分的數據。只要我檢索5部分數據,我需要返回UI,然後在一段時間後,我需要發送其餘部分的數據。有沒有任何代碼片段。請分享,如果存在。 – praneeth 2015-07-28 11:05:58

+0

這種API編程模型叫做什麼?如果有人要查找更多信息? – 2017-12-07 01:01:47