From: Oka Yasushi Date: 2001-10-18T22:36:54+09:00 Subject: [ruby-list:31935] dRuby でデータベースもどき 岡といいます。 dRubyで簡単なデータベースもどきが作れないかと思って いろいろ試しているのですが、どうもうまくいきません。 登録するデータの数が少ない場合は大丈夫なのですが、数が多くなると途中で止ま ってしまいます。 回避する方法はあるでしょうか。 目的は、"001-01"のようなアドレスで区別できるNodeオブジェクトを保持してくれ るサーバがいて、 クライアントのスクリプトからアドレスを指定して目的のNodeオブジェクトを取得 し、Nodeオブジェクトに 仕事をさせたら、サーバに戻すというようなことをやりたいのです。 クライアントのスクリプトは修正のために停止/起動を繰り返すけど、Nodeオブジェ クト群の状態は 保持しておきたい。dRubyが使えるかなぁと思ったわけです。 単純化したサンプルを載せておきます。 サーバを起動後、クライアントスクリプトを動作させると、数百件は登録できるけ ど、そのうちクライアントが とまってしまいます。 今はテストなので、サーバもクライアントも同じPC上で動かしてます。 OSはWIndows2000、Rubyはruby 1.6.4 (2001-06-04) [i386-cygwin]です。 サーバとクライアントを別のPCにしてもやはり途中でクライアント側はとまってし まいます。 /OKA ------- objtbl_svr.rb --------------- #!ruby -Ks require 'drb/drb' class Front include DRbUndumped # 初期化 def initialize(table) @db_table = table end # オブジェクトを返信 def get_obj(key) printf "オブジェクトを返信. key = %s\n", key return @db_table[key] end # オブジェクトを登録。keyはString def set_obj(key,obj) printf "オブジェクトを登録。key = %s\n", key @db_table[key] = obj end end DB_hash = {} DRb.start_service('druby://:20001', Front.new(DB_hash)) puts "Press enter to terminate." gets ------- objtbl_client.rb --------------- #!ruby -Ks require 'drb/drb' class Node def initialize(add) @add = add @mode = nil end attr_reader :add attr_accessor :mode end DRb.start_service() remote = DRbObject.new( nil, 'druby://localhost:20001' ) 100.times do |add_h| 10.times do |add_l| address = sprintf("%03d-%02d", add_h, add_l) node = Node.new(address) node.mode = "OPEN" puts "登録を要求" remote.set_obj(address, node) end end