簡體   English   中英

並發出站 HTTP Request in Node.js 導致響應變慢

[英]Concurrent outbound HTTP Request in Node.js makes the response slower

我目前正在對我的 API (Node.js + Express) 之一進行負載測試。 這個 API 向另一台服務器發出 HTTP 請求。 這是一個示例代碼:

var start = new Date()
axios.get('https://google.com')
     .then(function (response) {
         var end = (new Date() - start)/1000
         console.info('Finished in %ds', end)
     })

在測試過程中,我發現 HTTP 向另一台服務器(本例中為 google.com)的並發請求越多,響應就越慢。 我使用 Apache Jmeter 進行測試。

例如,如果我在一秒鍾內執行 1 個請求:

Finished in 0.150s

但是,如果我在一秒鍾內執行 100 個請求:

Finished in 0.320s
...
Finished in 1.190s
Finished in 2.559s
Finished in 1.230s
Finished in 5.530s

起初我認為其他服務器一定有問題,但事實並非如此,即使我將其更改為 google.com(根據示例),同樣的事情發生了。

node.js 發出的出站 http 請求越多,響應就越慢。 我試圖通過使用節點集群來改進我的 API,工作人員提供幫助,但我想進一步縮短響應時間。

有什么我可以做的嗎? 或者解釋為什么會這樣? 我認為由於我的 API 發出異步 http 請求,應該沒有阻塞,因此響應時間不應該增加這么大的數量。 謝謝。

我遇到了類似的問題 - 在我的實例中,我正在等待每個 API 調用,而不是讓它們全部異步發生。

為此,您可以將所有異步 API 調用推送到一個數組中。 比如你需要調用一系列的url:

const requests = []
urls = ['http...a/get','http...b/get']
urls.map(item => {
  request.push(axios.get(item))
})

既然這些調用中的每一個都是異步發生的,請確保在使用數據之前等待所有調用都解決。

const allAPIData = await Promise.all(requests)

如果任何 API 調用失敗,請務必處理您的 promise 分辨率,也許使用嵌套axios.get(url)的助手 function。 否則,任何失敗的 API 承諾都可能導致等待和解決Promise.all()語句的問題。

暫無
暫無

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

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