Azure功能 - 节点应用程序

时间:2017-09-26 23:32:44

标签: javascript node.js azure azure-functions

我正在尝试构建一个Azure函数,该函数会产生大量的传出HTTP请求。它似乎定期达到极限,所有请求都会超时几分钟。然后它再次开始工作并请求通过。

从搜索周围来看,听起来这可能是由于运行该功能的机器上的端口耗尽,但我不知道如何使用{{1}在Node应用程序中调试它或解决它} 图书馆。这听起来像Node应该汇集连接以防止这种情况。我根本不确定端口耗尽是问题,因为我无法在函数上使用request。我的笔记本电脑上一直没有问题。

这是一个简单的Azure功能,可以一次发出一个请求,并说明了这个问题:

netstat

我看到它成功运行,超时几分钟,再次成功运行......

1 个答案:

答案 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();
        }
    });
};