0

我是 node.js 的新手,正在使用 restify、mongoose 和 mongodb 构建服务。我正在构建的服务之一需要发送一封电子邮件,并且不需要通知服务的消费者电子邮件的发送状态。我使用下面的代码作为测试创建了代码,它以我想要的方式工作,但我想确保没有我没有看到的潜在问题。我担心的是,如果此服务在短时间内被调用 1,000 次并且电子邮件发送速度有些慢(每次 1-3 秒),那么这会导致我的节点服务器性能下降吗?我不确定这些项目是如何在内部排队的,也不确定是否有限制。我假设过程。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);
    });    
};
4

1 回答 1

1

由于发送电子邮件本质上是基于 I/O 的操作,因此我认为您不需要process.nextTick(因为无论如何 Node 都可以很好地处理 I/O)。

但是,我建议您使用本地 MTA(邮件传输代理),它将承担实际发送电子邮件的部分(SMTP 部分)。在该设置中,Node 会将邮件发送到本地 MTA(这是一个快速操作),然后 MTA 将开始发送这些电子邮件。当接收邮件服务器离线或暂时拒绝传入邮件时,MTA 通常也会处理邮件排队。

nodemailer可以配置为使用 SMTP 来传递电子邮件,或者将它们交给 sendmail(这是您应该使用的传输方式);node-email 仅将电子邮件交给 sendmail。在这两种情况下,sendmail也可以是另一个 MTA,如 Exim 或 Postfix,它们提供了与 sendmail 兼容的接口。

于 2013-03-27T15:47:12.980 回答