gpt4 book ai didi

javascript - Node.js:http 请求在 1 分钟后超时

转载 作者:行者123 更新时间:2023-11-29 21:59:19 24 4
gpt4 key购买 nike

我正在使用 Node.js(版本 0.10.28)向我的 Ruby API 创建一个 http.request 以获取大量数据(来自 PostgreSQL 数据库的 21,000 行)。问题是请求似乎超时并在 1 分钟后返回 404 错误。我知道这是真的,因为 Ruby API 为请求返回 61 秒,我计算 Node 的请求需要多长时间(结果为 60 秒和 404)。但是,如果我 wget 或使用 jQuery 的 $.ajax 超时为 4 分钟,我可以获得 21,000 行。很明显,它不能是 404,因为其他获取数据的方法也有效。

我也有点困惑,因为无论我看什么,http.request 都不应该在 2 分钟后超时,根据:

Node.js docs

GitHub issue #1

GitHub issue #2

我已经尝试了几种方法来让它工作,包括:设置 express's middleware ; listening for the socket timeout并恢复请求;并将超时设置为 0,因此没有超时。不幸的是,这些方法都没有奏效,或者至少从我的理解来看是这样。

为清楚起见,这是我的代码...设置该限制意味着仅返回 18,000 条记录,这似乎是 API 花费超过 60 秒的分界点:

var http = require('http');
var options = {
path: '/api/records.json?limit=18000',
method: 'GET',
host: 'localhost',
requestCert: true,
rejectUnauthorized: false
};
var req = http.request(options, function(res) {
var endDate = new Date();
console.log('done', endDate - startDate);
var output = [];
res.on('data', function(chunk) {
output.push(chunk);
});
res.on('end', function() {
var data = output.join('');
console.log(data);
return {data: data, success: true};
});
});
req.on('socket', function(socket) {
socket.setTimeout(0); // no timeout
socket.on('timeout', function() {
socket.resume(); // tried resuming the timeout
});
});
req.end();
var startDate = new Date();
console.log('starting', startDate);

API URL 有效且有效,因为我已经通过 wget$.ajax 验证了这一点,那么如何解决 Node 中的超时问题?

更新

经过进一步检查,如果我取出 socket.setTimeout(0); 并尝试进入 socket.on('timeout',我不会实际上进入回调......这很奇怪,但在我得到 404 之前总是 60 秒

最佳答案

这是一个 nginx 问题,因为我使用它来代理到我的 API,所以通过设置 proxy_read_timeout 180s 对代理的配置进行了简单的更改。

关于javascript - Node.js:http 请求在 1 分钟后超时,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/24700047/

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