我使用Node.js的-异步及请求模块抓取100+百万计的网站,我不断碰到的错误ESOCKETTIMEDOUT及ETIMEDOUT几分钟后.
重新启动脚本后它再次起作用.它似乎不是连接限制问题,因为我仍然可以执行resolve4,resolveNs,resolveMx,也curl没有延迟.
你看到代码有什么问题吗?或任何建议?我想把async.queue()并发推高到至少1000.谢谢.
var request = require('request'),
async = require('async'),
mysql = require('mysql'),
dns = require('dns'),
url = require('url'),
cheerio = require('cheerio'),
iconv = require('iconv-lite'),
charset = require('charset'),
config = require('./spy.config'),
pool = mysql.createPool(config.db);
iconv.skipDecodeWarning = true;
var queue = async.queue(function (task, cb) {
dns.resolve4('www.' + task.domain, function (err, addresses) {
if (err) {
//
// Do something
//
setImmediate(function () {
cb()
});
} else {
request({
url: 'http://www.' + task.domain,
method: 'GET', …Run Code Online (Sandbox Code Playgroud) 我正在使用请求npm模块,并以大约每秒100个请求的周期发出上游请求。超时已设置为10秒。问题是我一直在1000个请求中始终获得1个的ESOCKETTIMEDOUT。
我非常确定上游服务器不会超时。这可能是什么原因以及如何避免它。