簡體   English   中英

返回多個異步響應

[英]Returning multiple asynchronous responses

我目前正在尋找建立一個接受請求的端點,並在加載時以遞增的方式返回響應數據。

這樣做的應用是,給定一個數據上傳,我想為該數據計算許多不同的指標。 隨着每個指標的異步計算,我想將此指標的值返回到前端進行渲染。

為了進行測試,我的控制器如下所示,嘗試使用res.write

uploadData = (req, res) => {
   res.write("test");
   setTimeout(() => {
       res.write("test 2");
       res.end();
   }, 3000);
}

但是,我認為問題源於我在React-Redux中編寫的客戶端,並通過Axios調用來調用該路由。 據我了解,這是因為axios請求在收到第一個響應后便關閉,並且連接不會保持打開狀態。 這是我的axios調用的樣子:

axios.post('/api', data)
  .then((response) => {
      console.log(response);
  })
  .catch((error) => {
       console.log(error);
  });

是否有捷徑可尋? 我也考慮過流式傳輸,但是我對流式傳輸的關注是,我希望每個連接在短時間內打開(即僅在計算指標時打開)的客戶端之間是直接且唯一的。

我還應該提到,上載的資源是數據庫,並且我想避免由於多個端點而多次解析和打開連接。

預先感謝,如果可以提供更多背景信息,請告訴我

在仍然使用傳統API的情況下處理此問題的一種方法是將指標存儲在某個對象(例如數據庫或Redis)中的某個位置,然后長時間輪詢資源。

對於一個真實的例子,假設您要計算以下foo,度量時間,請求長度,bar和foobar的度量。

您可以在存儲中創建一個如下所示的對象:

{
  id: 1,
  lengthOfRequest: 123,
 .....
}

那么您將在API中創建一個類似於metrics/{id}的終結點並返回該對象。 只要繼續呼叫路由,直到一切完成即可。

當然,這樣做有一些明顯的弊端,但是一旦您獲得足夠的信息來了解度量平均需要花費多長時間,就可以調整兩次調用API之間的時間。

暫無
暫無

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

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