我正在尝试构建一个Azure函数,该函数会产生大量的传出HTTP请求。它似乎定期达到极限,所有请求都会超时几分钟。然后它再次开始工作并请求通过。
从搜索周围来看,听起来这可能是由于运行该功能的机器上的端口耗尽,但我不知道如何使用{{1}在Node应用程序中调试它或解决它} 图书馆。这听起来像Node应该汇集连接以防止这种情况。我根本不确定端口耗尽是问题,因为我无法在函数上使用request
。我的笔记本电脑上一直没有问题。
这是一个简单的Azure功能,可以一次发出一个请求,并说明了这个问题:
netstat
我看到它成功运行,超时几分钟,再次成功运行......
答案 0 :(得分:0)
@ david-ebbo,你的建议很有帮助。从您发布的链接,我可以使用http代理来限制套接字池。运行需要一段时间,但现在没有请求超时。
我上面的例子现在看起来像这样:
const cp = require('child_process');
const request = require('request');
const http = require('http');
module.exports = function (context, myTimer) {
context.log('Starting with agent');
const pool = new http.Agent();
pool.maxSockets = 4;
function doCall(cb) {
const url = 'https://jsonplaceholder.typicode.com/posts';
request({ url, pool }, (err) => {
if (err) {
context.log("error: " + err.toString());
}
cb();
});
}
let i = 500;
doCall(function iterate() {
if (i-- > 0) {
context.log('iterate ' + i);
doCall(iterate);
} else {
context.log('done');
context.done();
}
});
};