2016-06-28 19 views
1

我有一個請求來更新服務器中的數據。Java從一個請求中播放兩個響應

當我更新數據,我需要運行一個非常沉重的計算需要10-30秒。

我想這樣做:

  1. 發送查詢請求從客戶
  2. 更新獲取服務器的請求,並開始一個新的線程做計算,然後更新我的數據庫中的對象和向客戶端返回更新完成的響應。
  3. 計算結束時 - 向客戶端發送另一個響應,通知他計算結束。

這樣我們有2個更新信息發送到客戶端。

+0

什麼是「一定的時間」? 30秒? 5個小時? – Salem

+0

時間約10-30秒 –

回答

0

在你的路線,你應該有2項:

,做更新到數據庫
  • 一條路線(讓我們把它叫做Controller.updateTheDatabase()),做了繁重的計算
  • 一條路徑(讓稱之爲 Controller.doHeavyCalculation())

(沒有上下文,很難提供良好的名稱)

然後你定義這些功能每一個在你的控制器

  1. doHeavyCalculation:調用你的計算服務異步
  2. updateTheDatabase:發送數據庫更新異步

一旦你有了這個,你可以打電話給你API,並使用2個響應separately(我使用AJAX JavaScript)來更新信息消息。

我使用PlayFramework與Scala很抱歉,如果我不能幫助大塊的代碼,但我碰到類似於你的問題。

這裏是the documentation for Asynchronous requests

編輯:重讀的問題後,我改變了我的做法

+1

Thnx很多!我試過這個,但是,當我返回第一個結果(更新 - 真實(完成))我回來了,所以我不能繼續並再次發送計算的迴應 –

+0

請參閱我的更新 – Daniel

+1

明白了! Thnx很多:)),我的問題是隻從服務器做它。謝謝:D –