gpt4 book ai didi

node.js - EADDRNOTAVAIL 在许多 http.get 请求到 localhost 之后

转载 作者:搜寻专家 更新时间:2023-10-31 22:19:25 27 4
gpt4 key购买 nike

在 28233 次请求后对本地主机 (Apache) 执行许多 http.get-requests 时,我得到 EADDRNOTAVAIL

splinter 时:

  • 无法 向本地主机发出 http.request(大约)10 秒 (EADDRNOTAVAIL)

虽然这 10 秒

  • 可以 curl http://localhost(Apache 没有错误,它仍然像 charm 一样工作)
  • 可以www.google.com 发送http.get-request(从node.js)(该错误仅影响对localhost 的请求)

10 秒后

  • 可以再次向本地主机发出http.request(就好像node.js 已经 self 修复一样)

这是代码:

var http = require( "http");

function httpRequest( callback ) {
var options = {
host: 'localhost',
port: 80,
path: ''
},
data = "";

http.get(options, function(resp){
resp.on('data', function( chunk ){
data += chunk;
}).on("end", function() {
callback( null, data );
});
}).on("error", function(e){
callback( e );
});
}

function loop( i, callback ) {
if( i < 100000 ) {
httpRequest( function( err, data ) {
if( err ) {
console.log( "Error!", i, err );
return;
}
if( i % 1000 === 0 ) {
console.log( i );
}
loop( i+1, callback );
});
} else {
callback();
}
}

console.log( "GO!");
loop( 0, function() {
console.log( "READY!");
});

最佳答案

我通过覆盖默认全局代理找到了解决方案。一种可能是设置 maxSockets:1:

var http = require( "http"),
agent = new http.Agent( {maxSockets: 1} ); // <-- this is new

function httpRequest( callback ) {
var options = {
host: 'localhost',
port: 80,
path: '',
agent: agent // <-- and this is new
},
...

通过此更正,上面的示例可以正常工作。但是我的生产代码中仍然存在 EADDRNOTAVAIL 问题,所以agent 设置为 false 终于成功了:

var http = require( "http");

function httpRequest( callback ) {
var options = {
host: 'localhost',
port: 80,
path: '',
agent: false // <-- here
},
...

我也在 GitHub 上发布了这个问题.

关于node.js - EADDRNOTAVAIL 在许多 http.get 请求到 localhost 之后,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/20991551/

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