Azure Functions [JavaScript / Node.js]
从我的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 Functions的解决方案:使用静态HttpClient类的/。
我有一个问题,Node.js Azure功能中是否有类似的方法?或者任何其他方法来避免这个问题,在Node.js Azure Function执行之间共享一个对象?
回答如下:如果在短时间内触发了数千个函数,则应通过修改http.globalAgent
或传递新的Agent实例来限制套接字
代理负责管理HTTP客户端的连接持久性和重用。它为给定的主机和端口维护一个待处理请求队列,为每个队列连接重新使用单个套接字连接,直到队列为空,此时套接字被销毁或放入池中,以便再次用于请求到同一个主机和端口。它是被销毁还是合并取决于keepAlive选项。
资料来源:https://nodejs/api/http.html#http_class_http_agent
http.globalAgent.maxSockets
默认为无穷大,所以除非你限制这个值,你的函数将用完套接字,你会看到你的请求开始失败。此外,如果您计划连接到同一主机,则应在globalAgent/Agent
上启用keep-alive以启用池化连接。