tom*_*tti 5 javascript azure node.js azure-functions
从我的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();
Run Code Online (Sandbox Code Playgroud)
上面的代码可能会有效,但我怀疑这不是反模式.
想象一下在短时间内触发了数千个函数的情况 - 对于每次执行,我们需要创建一个HTTP客户端并创建一个连接......
通过简短的研究,我发现了一些针对C#Azure功能的解决方案提议:https://docs.microsoft.com/en-us/azure/architecture/antipatterns/improper-instantiation/ ,它使用静态HttpClient类.
我有一个问题,Node.js Azure功能中是否有类似的方法?或者任何其他方法来避免这个问题,在Node.js Azure Function执行之间共享一个对象?
小智 5
如果在短时间内触发了数千个函数,您应该通过修改或传递新代理http.globalAgent
的实例来限制套接字
代理负责管理 HTTP 客户端的连接持久性和重用。它维护一个给定主机和端口的待处理请求队列,为每个请求重复使用单个套接字连接,直到队列为空,此时套接字要么被销毁,要么放入池中,以便再次用于请求到同一主机和端口。是销毁还是池化取决于 keepAlive 选项。
来源: https: //nodejs.org/api/http.html#http_class_http_agent
http.globalAgent.maxSockets
默认为无穷大,因此除非您限制该值,否则您的函数将耗尽套接字,并且您将看到您的请求开始失败。此外,如果您计划连接到同一主机,则应启用保持活动状态globalAgent/Agent
以启用池连接。
归档时间: |
|
查看次数: |
1644 次 |
最近记录: |