在我的 Node 站点中,我调用了一个使用标准 http get 构建的 Restful API 服务。经过几个小时的通信成功工作后,我发现请求停止发送,它只是等待并最终超时。
正在调用的 API 仍然可以很好地接收来自其他地方的请求,但是当从站点发送请求时,它不会到达 API。
我尝试过使用stream.pipe、util.pump并将文件写入文件系统。
我使用的是 Node 0.6.15。我的站点和正在调用的服务位于同一服务器上,因此正在调用本地主机。内存使用率约为 25%,CPU 平均使用率约为 10%。
问题出现一段时间后,我开始使用 request模块,但我得到相同的行为。它在失败之前进行的调用次数似乎在 5 到 100 之间变化。最后我必须重新启动站点而不是 api 才能使其再次工作。
网站中的代码大致如下:
var Request = require('request');
downloadPDF: function(req, res) {
Project.findById(req.params.Project_id, function(err, project) {
project.findDoc(req.params.doc_id ,function(err, doc) {
var pdfileName;
pdfileName = doc.name + ".pdf";
res.contentType(pdfileName);
res.header('Content-Disposition', "filename=" + pdfileName);
Request("http://localhost:3001/" + project._id).pipe(res);
});
});
}
我对可能发生的事情很了解。
最佳答案
您是否尝试增加agent.maxSockets,或禁用http.Agent功能?默认情况下,最新的 Node 版本使用套接字池进行 HTTP 客户端连接,这可能是问题的根源 http://nodejs.org/api/http.html#http_class_http_agent
关于Node.js 服务器 GET 到单独的 API 在使用几个小时后失败,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/10253529/