我是node.js的新手,正在使用restify,mongoose和mongodb构建服务。我正在构建的服务之一需要发送电子邮件,并且不要求服务的消费者被告知电子邮件的发送状态。我使用以下作为测试创建了代码,它按照我想要的方式工作,但我想确保没有我没有看到的潜在问题。我担心的是,如果在短时间内调用此服务1,000次并且电子邮件发送速度稍慢(每次1-3秒),那么这会导致节点服务器性能下降吗?我不确定这些物品是如何在内部排队的,如果有限制试图留下来。我假设process.nextTick基本上将项目排队等待执行,但在开始压倒节点的事件循环之前是否有项目数限制?这是我的测试代码:
var sendUsingTemplate = function(template, mergeData) {
console.log('emailManager.sendUsingTemplate starting...');
console.log('template: ' + template);
console.log('mergeData: ' + mergeData);
process.nextTick(function(){
console.log('setting up async code in here...');
setTimeout(function() {
console.log('ok done with async!');
}, 10000);
});
};
答案 0 :(得分:1)
由于发送电子邮件本质上是一种基于I / O的操作,因此我认为您不需要process.nextTick
(因为I / O无论如何都会很好地处理)。
但是,我建议您使用本地MTA(邮件传输代理)来实际发送电子邮件(SMTP部分)。在该设置中,Node将邮件发送到本地MTA(这是一个快速操作),MTA将开始提供这些电子邮件。当接收邮件服务器脱机或暂时拒绝传入邮件时,MTA通常也会处理邮件排队。
nodemailer可以配置为使用SMTP来发送电子邮件,或者将它们发送到sendmail(这是您应该使用的传输); node-email只能通过电子邮件发送给sendmail。在这两种情况下,sendmail
也可以是另一个MTA,如Exim或Postfix,它们提供与sendmail兼容的界面。