1

Express アプリがあり、受信したリクエストごとにドメインを使用しています。ミドルウェアを追加して、それ以上のミドルウェアがドメインの「内部」で実行されるようにしました。

app.use(function(req, res, next) {
    var d = domain.create();

    d.req = req;

    d.add(req);
    d.add(res);

    d.run(next);
});

また、リクエストの処理中に実行される一部のコードは、最初のリクエストへの参照を取得するために使用されます。これはヘッダー、Cookie などです。このコードに直接process.domain.req渡すことはできません。reqこの奇妙なコードは、実行場所がわからないクロス環境コード (ブラウザ用とノード用) の一種です。内部的には、一部のベース レイヤーは Node とブラウザー (特にネットワーク コード) で異なる方法で実装されています。requestブラウザーの場合は XMLHttpRequest であり、NodeJS の場合はlibに基づくカスタム ラッパーです。

メモリリークが心配です。これreqは、ドメインに保存されていることを参照しています。彼らはこれを保持して、ガベージコレクションを行わないようにすることはできますか?

また、定期的にドメインを破棄する必要がありますか? または、いくつかのエッジ/エラー ケースでドメインを破棄する必要がありますか?

4

1 に答える 1

3

通常、エラーまたは終了イベントでドメインを破棄します。例はhttps://gist.github.com/regality/3061748です。

ただし、私の理解では、 domain.dispose() メソッドは廃止されています。詳細については、この git の問題を参照してください - https://github.com/joyent/node/issues/5018

さらにドキュメントによると、エラーが発生した場合はドメイン プロセスを強制終了することをお勧めします。そのリンクには、適切な説明と例があります。

于 2014-01-18T10:32:29.023 に答える