node.js-到端点的post请求在一段时间后开始停滞
我已经开发了一个node.js webapp,并将express+mongoose部署到Amazon EC2实例中 当一个文件被上传到特定的s3存储桶时,应用程序会收到SNS通知,在mongodb中存储一些东西,然后向amazon之外的某个端点发送https帖子。https post使用请求库以这种方式完成:node.js-到端点的post请求在一段时间后开始停滞,node.js,amazon-ec2,mongoose,amazon-sns,node-request,Node.js,Amazon Ec2,Mongoose,Amazon Sns,Node Request,我已经开发了一个node.js webapp,并将express+mongoose部署到Amazon EC2实例中 当一个文件被上传到特定的s3存储桶时,应用程序会收到SNS通知,在mongodb中存储一些东西,然后向amazon之外的某个端点发送https帖子。https post使用请求库以这种方式完成: var options = { url:"https://"+config.get('some.endpoint')+"/somepath", metho
var options = {
url:"https://"+config.get('some.endpoint')+"/somepath",
method:'POST',
body:postdata,
json:true
};
requests.post(options,function(err,response,body){
if (!err && response.statusCode === 200) {
logger.info("notified ok ");
}else{
logger.error("1 " + err);
logger.error("2 " + response);
logger.error("3 " + body);
}
});
这是使用一个简单的回调模型完成的,即我没有使用异步库
文件不断上传,因此SNS以每秒约5/10个请求的速度点击我的应用程序。在应用程序启动的前十分钟,我可以通过检查日志看到,随着传入请求的到来,http post正在以接近速度交付
但是在某个时刻,requests.post回调开始落后,直到它停止出现在日志文件中,尽管请求不断出现。通过检查config.get'some.endpoint'中指定的另一个端点,我可以有效地判断出没有传递帖子。在不同的突发事件中,随着5分钟或更长时间的延迟,一些新消息会出现在日志中,就像它试图赶上,但从长远来看,它们根本不会出现
我已经意识到,如果我通过停止/重新启动传入请求来进行一些手动流控制,我可以使它正常工作
我做错什么了吗?请求是否因为某种原因堆积在某个地方?我怎么检查这个?我应该使用一些库来确保执行吗
node.js是否更喜欢处理新的传入请求而不是处理旧的回调请求,而且这些回调永远不会执行
欢迎就如何调试此问题提供任何帮助或建议
提前谢谢 尝试将pool:false添加到选项中,看看这是否有帮助。我以前在使用http代理时遇到过这个问题。实际上没有帮助,状态相同。有人告诉我,应该使用承诺或类似async的框架来正确处理回调。我做了一些测试,似乎效果更好。