Azure函数[JavaScript/Node.js]-HTTP调用,良好实践

Azure函数[JavaScript/Node.js]-HTTP调用,良好实践,javascript,node.js,azure,azure-functions,Javascript,Node.js,Azure,Azure Functions,从我的Azure函数(在Node.js中运行,由EventHub消息触发)中,我想向某个外部页面发出post请求。 比如: module.exports = function (context, eventHubMessages) { var http = require("http"); context.log('JavaScript Function triggered by eventHub messages '); http.request(post_options, functi

从我的Azure函数(在Node.js中运行,由EventHub消息触发)中,我想向某个外部页面发出post请求。 比如:

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功能的解决方案: 它使用静态HttpClient类


我有一个问题,Node.js Azure函数中是否有类似的方法?或者以任何其他方式避免此问题,在Node.js Azure函数执行之间共享对象?

如果在短时间内触发了数千个函数,则应通过修改http.globalAgent或传递新函数的实例来限制套接字

代理负责管理连接持久性和重用 对于HTTP客户端。它维护一个给定对象的挂起请求队列 主机和端口,对每个端口重复使用单个套接字连接,直到 队列为空,此时套接字被销毁或放置 进入一个池中,在该池中,它被保留以再次用于对同一个池的请求 主机和端口。它是被销毁还是合并取决于 保留选项

资料来源:

http.globalAgent.maxSockets
默认为无穷大,因此除非您限制此值,否则函数将耗尽套接字,您将看到请求开始失败。
此外,如果您计划连接到同一主机,则应在
globalAgent/Agent
上启用keep-alive以启用池连接。

我认为C中的模式不适用于节点功能。节点应该为您管理连接。我会将
require
移出函数,并将
context.done
移到回调中。您能调整另一端以接受WebSocket吗?因为这是你最好的计划,如果你说的是每秒数百次TCP握手,那么所有其他的方法或多或少都是一个糟糕的解决方法。