[英]Azure Functions [JavaScript / Node.js] - HTTP call, good practices
從我的Azure函數(在Node.js中運行,由EventHub消息觸發)我想向一些外部頁面發布一個帖子請求。 就像是:
module.exports = function (context, eventHubMessages) {
var http = require("http");
context.log('JavaScript Function triggered by eventHub messages ');
http.request(post_options, function(res){
...
})
context.done();
上面的代碼可能會有效,但我懷疑這不是反模式。
想象一下在短時間內觸發了數千個函數的情況 - 對於每次執行,我們需要創建一個HTTP客戶端並創建一個連接......
通過簡短的研究,我發現了一些針對C#Azure功能的解決方案提議: https : //docs.microsoft.com/en-us/azure/architecture/antipatterns/improper-instantiation/ ,它使用靜態HttpClient類。
我有一個問題,Node.js Azure功能中是否有類似的方法? 或者任何其他方法來避免這個問題,在Node.js Azure Function執行之間共享一個對象?
如果在短時間內觸發了數千個函數,則應通過修改http.globalAgent
或傳遞新代理的實例來限制套接字
代理負責管理HTTP客戶端的連接持久性和重用。 它為給定的主機和端口維護一個待處理請求隊列,為每個隊列連接重新使用單個套接字連接,直到隊列為空,此時套接字被銷毀或放入池中,以便再次用於請求到同一個主機和端口。 它是被銷毀還是合並取決於keepAlive選項。
資料來源: https : //nodejs.org/api/http.html#http_class_http_agent
http.globalAgent.maxSockets
默認為無窮大,因此,除非您限制此值,否則您的函數將耗盡套接字,您將看到您的請求開始失敗。 此外,如果您計划連接到同一主機,則應在globalAgent/Agent
上啟用keep-alive以啟用池化連接。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.