From: Masatoshi SEKI Date: 2001-01-19T00:29:41+09:00 Subject: [ruby-list:27226] drb-1.3.1 咳といいます。 drb-1.3.1をリリースします。RAAを更新しftp.netlab.co.jpにputしました。 変更点は次の通り。 * リモート側のScriptErrorを捕捉するようにした * DRbUnknownが不完全だったので修正した DRbUnknownはかなりマイナーな機能なので説明します。 DRbUnknownはMarshal.loadできないときに作られるオブジェクトです。 DRbUnknwonをdumpしてloadすると、load時にもとのオブジェクトを 復元できるか試みます。 DRbUnknownのうれしいところは、例えばコンテナ(集合?)担当のプロセスが 具のクラスを知らなくてもよいところです。 * queue.rb -- キュー管理だけ * who.rb -- クラスWhoの定義 * whor.rb -- キューからWhoを取り出す。require 'who'してる。 * whow.rb -- キューにWhoを積む。require 'who'してる。 従来は queue.rb が require 'who' しないと Who を知らないために 値渡しでやってきたWhoをMarshal.loadできなかったのです。 DRbUnknownはこの辺をごまかしてくれます。 --- queue.rb require 'drb/drb' require 'thread' uri = ARGV.shift || raise("usage: #{0} ") DRb.start_service(uri, Queue.new) puts '[return] to exit.' gets --- who.rb class Who def initialize(name) @name = name end attr_reader :name end --- whor.rb require 'drb/drb' require 'who' uri = ARGV.shift || raise("usage: #{$0} ") DRb.start_service queue = DRbObject.new(nil, uri) p queue.pop # => Who --- whow.rb require 'drb/drb' require 'who' begin uri = ARGV.shift || raise name = ARGV.shift || raise rescue puts "usage: #{$0} " exit 2 end DRb.start_service queue = DRbObject.new(nil, uri) queue.push(Who.new(name))