gpt4 book ai didi

node.js - Nodejs + mikeal/Request模块,如何关闭请求或增加MaxSockets

转载 作者:搜寻专家 更新时间:2023-11-01 00:01:51 24 4
gpt4 key购买 nike

我有一个 Nodejs 应用程序,旨在对大型 Web 应用程序执行简单的端到端测试。此应用程序使用 mikeal/RequestCheerio在整个应用程序中导航、请求、遍历和检查网页的模块。

我们正在重构一些测试,并且在多个 request 函数被串联调用时遇到了问题。我相信这可能是由于 Node.js 进程达到了 MaxSockets 限制,但我不完全确定。

一些代码...

var request = require('request');
var cheerio = require('cheerio);
var async = require('async');

var getPages_FromMenuLinks = function() {
var pageUrl = 'http://www.example.com/app';
async.waterfall([
function topPageRequest(cb1) {
var menuLinks = [];
request(pageUrl, function(err, resp, page) {
var $ = cheerio.load(page);
$('div[class*="sub-menu"]').each(function (i, elem) {
menuLinks.push($(this).find('a').attr('href');
});
cb1(null, menuLinks);
});
}, function subMenuRequests(menuLinks, cb2) {
async.eachSeries(menuLinks, functionv(link, callback) {
request(link, function(err, resp, page) {
var $ = cheerio.load(page);
// do some quick validation testing of elements on the expected page
callback();
});
}, function() { cb2(null) } );
}
], function () { });
};
module.export = getPages_FromMenuLinks;

现在,如果我运行此 Node 脚本,它会运行第一个 topPageRequest 并启动 subMenuRequests,但在完成对第三个子菜单的请求后会卡住项目。

看来我可能会在 Node 或我的机器上达到最大套接字限制(?)——我正在运行 Node v0.10.26 的标准 Windows 8 机器上对此进行测试。

我试过使用 request({pool:{maxSockets:25}, url:link}, function(err, resp...,但它似乎没有任何区别。

似乎还有一种方法可以中止请求对象,如果我首先实例化它(如发现的 here )。但我不知道如何“解析”page,类似于上面代码中发生的情况。也就是说,从解中找到in the link ...

var theRequest = request({ ... });
theRequest.pipe(parser);
theRequest.abort();

...,如何将我的代码重写为 pipe 并“解析”请求?

最佳答案

您可以轻松地同时发出数千个请求(例如,来自单个 for 循环),一旦某个特定请求得到服务,它们将自动排队并一个接一个地终止。

我认为默认情况下每个域有 5 个套接字,在您的情况下这个限制应该绰绰有余。

很可能是您的服务器没有正确处理您的请求(例如,出错时它们没有终止并无限期挂起)。

您可以执行三个步骤来查明发生了什么:

  1. 检查您是否发送了正确的请求——正如@mattyice 观察到的,您的代码中存在一些错误。

  2. 调查服务器代码以及在那里处理您的请求的方式——对我来说,服务器似乎不会首先服务/终止它们。

  3. 尝试在发送请求时使用setTimeout。 5000 毫秒应该是合理的等待时间。超时时,请求将被中止并显示适当的错误代码。

作为建议:我建议使用一些更合适、更易于使用且更准确的工具来进行测试:例如幻影。

关于node.js - Nodejs + mikeal/Request模块,如何关闭请求或增加MaxSockets,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/26630973/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com