2013-03-27 2 views
0

저는 node.js를 처음 사용하고 restify, mongoose 및 mongodb를 사용하여 서비스를 구축하고 있습니다. 내가 만들고있는 서비스 중 하나는 전자 메일을 보내야하며 전자 메일의 보내기 상태를 서비스 소비자가 알 필요가 없습니다. 아래 코드를 테스트로 사용하여 코드를 만들었습니다. 원하는 방식으로 작동하고 있지만 보이지 않는 잠재적 인 문제가 없는지 확인하고자합니다. 내 관심사는이 서비스가 짧은 기간 내에 1,000 회 호출되고 전자 메일이 다소 느리게 전송되면 (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가 있기 때문에 어차피 노드가 꽤 잘 처리) 필요가 있다고 생각하지 않습니다.

그러나 실제로 전자 메일 (SMTP 부분)을 보내는 부분을 담당 할 로컬 MTA (Mail Transfer Agent)를 사용하는 것이 좋습니다. 이 설정에서 Node는 로컬 MTA에 메일을 보내고 (빠른 작업 임) MTA가 해당 전자 메일 배달을 시작합니다. MTA는 수신 메일 서버가 오프라인이거나 일시적으로 수신 메시지를 거부 할 때 메일 대기열을 처리합니다.

nodemailer은 SMTP를 사용하여 전자 메일을 배달하거나 사용하려는 전송 인 sendmail에 전자 메일을 넘기도록 구성 할 수 있습니다. node-email은 센드 메일에 전자 메일 만 전달합니다. 두 경우 모두 sendmail은 Exim 또는 Postfix와 같이 sendmail 호환 인터페이스를 제공하는 다른 MTA 일 수도 있습니다.

관련 문제