0

私はnode.jsが初めてで、restify、mongoose、およびmongodbを使用してサービスを構築しています。私が構築しているサービスの 1 つは、電子メールを送信する必要があり、サービスの利用者に電子メールの送信ステータスを通知する必要はありません。以下をテストとして使用してコードを作成しましたが、希望どおりに機能していますが、見ていなかった潜在的な問題がないことを確認したいと思います。私の懸念は、このサービスが短期間に 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(とにかく I/O は Node によって適切に処理されるため)。

ただし、実際に電子メールを送信する部分 (SMTP 部分) を担うローカル MTA (Mail Transfer Agent) を使用することをお勧めします。そのセットアップでは、ノードはメールをローカル MTA に送信し (これは高速な操作です)、MTA はそれらの電子メールの配信を開始します。MTA は、通常、受信メールサーバーがオフラインの場合や受信メッセージを一時的に拒否している場合に、メールのキューイングも処理します。

nodemailerは、SMTP を使用して電子メールを配信するか、sendmail (使用する必要があるトランスポート) に渡すように構成できます。node-email は、電子メールを sendmail に渡すだけです。どちらの場合もsendmail、sendmail 互換のインターフェースを提供する Exim や Postfix などの別の MTA にすることもできます。

于 2013-03-27T15:47:12.980 に答える