githubにtokyotuplestore.rbを追加した。Tokyo Cabinetを永続化(というより次回の起動のためのメモ)として使うTupleSpaceの部品。
PTupleSpaceを使うプロセスはただ一つのTupleStoreという永続係を持てます。なんでただ一つかというと、dRubyの参照情報として通常のObject.object_idではなくTupleStoreのKeyを用いるからです。
require 'rinda/ptuplespace' require 'rinda/tokyotuplestore' store = Rinda::TokyoStore.new('tokyo.tc') Rinda::setup_tuple_store(store) DRb.install_id_conv(Rinda::TupleStoreIdConv.new) ts = Rinda::PTupleSpace.new ts.restore DRb.start_service('druby://localhost:23456', ts) DRb.thread.join
storeって変数に束縛してるのがTokyo Cabinetを用いたTupleStore。ここは別のものに取り替えられます。
このプロセスを中断し、再起動してもタプルだけはさっきの状態で復帰します。クライアントとの接続は切れちゃうので、待合せの状態までも含めて完全に復帰することはできません。
require 'drb/drb' ro = DRbObject.new_with_uri('druby://localhost:23456') p ro.write([:hello, 'again']) => #<DRb::DRbObject:0x128874 @ref=[:TupleStoreId, "7"], @uri="druby://localhost:23456">
じつはTupleSpaceへのwriteには戻り値があって、自分がwriteしたタプルをあとでキャンセルできるようなハンドルが返ります。
このハンドルはTupleSpaceの寿命を超えて使うことができるように、参照情報に細工してあります。こんな風に。
@ref=[:TupleStoreId, "7"]