gpt4 book ai didi

node.js - 在 Node 中,在循环中发布 HTTP 请求(例如 0 - 10000),抛出错误 : Socket hang up

转载 作者:太空宇宙 更新时间:2023-11-04 02:36:04 25 4
gpt4 key购买 nike

代码座右铭:为了检查redis pub/sub性能,我尝试在node.js中循环发出http请求。

问题是:假设我的循环范围从0到10000,当我运行 Node 时,它将循环发送post请求。正如预期的那样,它可以正常工作直到 120 秒。之后,当 Socket 挂起时,该 Node 会抛出错误。在检查解决方案时,我发现该 Node 的默认套接字超时为2分钟。

问题是:1. 更改默认超时时间可以解决问题吗?2. 如果是这样我们如何更改默认值?3.除了改变socket超时值之外,还有其他方法可以解决这个问题吗?

代码是:

var clientNo = 100000,a=0;
var express = require('express'),
app = express(),
http = require('http'),
server = http.createServer(app);
http.globalAgent.maxSockets = Infinity;
app.enable('trust proxy');
app.disable( 'x-powered-by' );
app.use(express.bodyParser());
app.use(app.router);
app.set('port', 6002);

server.listen(app.get('port'));
var postint= setInterval(function(){
makeSubscription(a,function(query){
var options = {
path:query,
port: '6001',
method: 'POST'
};

var req = http.request(options, function(response){
response.on('end', function () {
console.log("Ends");
});
});
req.on('error', function (e) {
console.log(e);
});
req.end();
});
a++;
if(a == clientNo)
{
clearInterval(postint);
}
},1);

注意:我正在向不同路径上的同一端口发送另一个 post 请求,设置超时时间为 1 秒。

最佳答案

可以简单地编写代码来完成相同的工作。

var a=0,clientNo = 10;
var http=require('http');
var sub = setInterval(function(){
var temp = '/?channel=channel'+a;
var options = {
host:'127.0.0.1',
port:'6001',
path:temp,
method:'POST'
};
a++;
var req = http.request(options,function(res){
res.on('data', function(chunk) {
console.log('data');
});
res.on('error', function(err) {
console.log(err);
});
res.on('end', function() {
console.log('end');
});
});
req.on('error',function(err){
console.log(Date());
});
req.end();
if(a== clientNo)
{
clearInterval(sub);
}
},1);

也可以以同样的方式发送更多请求。

关于node.js - 在 Node 中,在循环中发布 HTTP 请求(例如 0 - 10000),抛出错误 : Socket hang up,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/22250731/

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