@ystk_skm です。
小林さん
> ある時点でいくつのドメインが存在していても,
アクティブなドメインは高々一つだけです.
「並行して」という表現が誤解を与えました。気をつけます。
ドメインが複数存在し、それが ( Node.js Docs の Domain - Explicit Binding に書かれている例のような )
ドメインの中にドメインを存在させているような場合ではなく... とか正確に書くべきでした。
大津さんがフォローしてくださいましたが(^^;
> process.domain は,あるコールバックやリスナに紐付けられた
>「現在のアクティブなドメイン」を参照していて,それは
> コールバックやリスナが呼び出される前後で書き換えられるので,
> 複数のドメインがあっても問題ないわけです.
むむ、そうなんですね。
d.run(cb) と d.bind(cb)() が等価であるあたりを見ていた時にロジックを読み違えたかもしれません。
見直してみます。
大津さん
> あっ、とりあえず公開APIの範囲でてっとり早くするために process を add し
ただけで、stack を変更して active なドメインを変えることができれば何でも
いいはずです。
このメッセージで気になる点は active なドメインの切り替えを意識しなければ
ならないかどうかです。小林さんにいただいた回答を見る限り意識しなくていい
ようになっているはず、、なんですが、何はともあれ結論を急ぎすぎた感は
あります・・・orz
ちなみに私がDomainが便利だと思って書き換えた部分を簡単に書くと
書き換え前:
function accept(req, res){
try {
exec()
} catch(e) {
res.end()
}
function exec(){
// many asynchronous I/O and bellyful of many try~catches
}
}
書き換え後:
function accept(req, res){
var d = domain.create();
d.on('error', function(e){
res.end();
});
d.run(exec);
function exec(){
// bye! all try~catches.
}
}
みたいな感じです。
以上、取り急ぎ回答のお礼まで。
2012年7月4日水曜日 19時47分03秒 UTC+9 Yoshitaka Sakamoto:
>
> @ystk_skm です。
> いつもMLを楽しく拝見させていただいております、ありがとうございます。
> (投稿は多分初ですが)
>
> 本日domainを使ってみたところ予想通りに動かず、ソースコードを少し
> 確認したところ気になった点があり質問させて頂く次第です。
>
> DomainクラスがuncaughtExceptionを補足できるのは prototype.enter, exit メソッドで
> process.domain を単純に書き換えているからのように見えます。(v0.8.1 domain.js L:82, L:95)
>
> この書き換えの結果を見る限りdomainは単一にしか持っておらず、複数のdomainが
> 並行して稼働するような環境では使えない。
> (そんな場合は child-process で process自体を分けろ的なメッセージ?)
>
> てことでdomainは単純に try-cache をそこら中に書かなくてd.on('error') を書くだけでいいんだよ、という
> 素晴らしい兵器ではないと考えた次第ですが、そのような理解で適切でしょうか。
> Domainに対する理解の仕方、適切な利用へのご意見、ご指導等いただければ幸いです。
>
> よろしくお願いします。
>
>