2013-03-27 121 views
0

的我是新来的Node.js和正在使用的RESTify,猫鼬和MongoDB建立了服务。我正在构建的其中一项服务需要发送电子邮件,并且不需要向服务的使用者通知电子邮件的发送状态。我使用下面的代码创建了代码作为测试,它以我想要的方式工作,但我想确保没有潜在的问题没有看到。我担心的是,如果这项服务在很短的时间内被调用了1000次,并且电子邮件发送速度有点慢(每次1-3秒),那么这是否会导致我的节点服务器性能下降?我不确定这些项目是如何在内部排队的,以及是否有限制来尝试保持。我认为process.nextTick本质上是为了执行而排队的项目,但是在开始淹没节点的事件循环之前,项目数是否有限制?这里是我的测试代码:Node.js的异步发送电子邮件

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); 
    });  
}; 

回答

1

由于发送电子邮件本质上是一个I/O类的操作,我不认为你需要process.nextTick(因为I/O是由节点处理得很好反正)。

但是,我建议您使用本地MTA(邮件传输代理),它将承担实际发送电子邮件(SMTP部分)的部分。在这种设置中,Node会将邮件发送到本地MTA(这是一种快速操作),MTA将开始发送这些电子邮件。当接收邮件服务器处于脱机状态或暂时拒绝传入消息时,MTA通常还会负责排队邮件。

nodemailer可以配置为使用SMTP发送电子邮件或将它们发送到sendmail(这是您应该使用的传输); node-email只有手中的电子邮件发送到sendmail。在这两种情况下,sendmail也可以是另一个MTA,如Exim或Postfix,它们提供了与sendmail兼容的接口。