From: Hideto ISHIBASHI Date: 2000-08-16T15:40:35+09:00 Subject: [ruby-list:24229] Re: drb.rb: 0x40155740 is recycledobject(IndexError) 石橋秀仁です。咳さん、お返事ありがとうございます。 Masatoshi SEKI wrote: > ああ、私も書いてしまった。 (x2) なんと(^^; もっと前に書いていたのですが、サーバエラーで メールするのが遅れてしまいました。すみませんでした。 > > IDに依らない参照ではありませんが、DRbIdConvに差し替えによって、 > > 上述の「時限付き参照表」を作れますね。書いたので添付します > > (drb_ref_id_conv.rb)。"recycled object"エラーは出ません。 > > ふむふむ。 > ちょうど手持ちの汎用「時限付きCollection」をパックして、 > そのサンプルとして TimerIdConv というのを入れるところでした。 > スクリプト自体もほぼ同じ機能だと思います。 なるほど。 > > これを使ってdrbを書き換えると、実際にリモートで参 > > 照されている期間中だけGCされないようになります。 > > 「タイムアウト」までの無駄な保持期間をなくせると思うので、 > > 検討してみてください。>咳さん > > えっと、これはどういうことですか ? > 実際にリモートで参照している期間を知ることができるのですか? > > 参照されたオブジェクトが「サーバ側が約束した期間だけは存在する」という > 作戦かと思ったのですが別の件 ? あっ、すみません。思いっきり飛躍してしまいました (^^; これはどういうことかというと、 server側)参照テーブルへのアクセスを開示(set_objをpublicに) client側)finalizerによりserver側の参照テーブルから自分のidを削除 という意味です。 つまり、clientのDRbObject自身に、server側リモートオブジェクト への参照が切れたことを通知させます。 「死ぬときは断末魔をあげてね」と設定してあげるわけです。 これって比較的すんなり実現可能ですよね。 何か間違いがあれば教えてください。それでは。 -- 石橋秀仁 hideto@jobweb.co.jp ICQ: 83329246 http://www.rr.iij4u.or.jp/~hideto-i/index.html