咳といいます。

> (1) 利用者の操作に応じてデータの検索を要求するために、webサーバが[
>     'find', 項目名, 条件 ]のようなtupleを投入。
> (2) 検索プロセスがそれを取り出して、検索した結果を示す[ 'result', [ 値,
>     ... ] ]のようなtupleを投入。
> (3) webサーバは(2)のtupleを待って、結果をwebブラウザへ送出。
> 
> ...といったことを実装しつつありまして、(2)でエラーを検出した場合にどうし
> ようかと。該当する情報がないなら0件と通知すれば良いですし、データベース
> のアクセスに失敗した場合でも0件と返答できなくはありませんが...。

> drubyをそのまま使う場合は、処理担当プロセスでエラーを検出際に例外を発生
> させることで、処理要求プロセスへ通知できますよね?当初はそのような方式を
> 考えていました。ruby-listの皆さんから、どんな方法がrindaらしいというか
> Rubyらしいのか、ご助言をいただけないでしょうか?

通信をRindaだけでやることにこだわらなければ、dRubyな分散オブジェクトを
混ぜてみるのはどうでしょう。

次の疑似コードでは、返信のタプルにエンジン側の処理スレッドを
渡しています。Thread#valueなので例外も受けとれると思います。
また、TupleSpaceを介さずに結果をうけとるので、検索結果が
大きい時などには、効率がいいかもしれません。


要求側

  key = "#{DRb.uri}:#{id}"
  ts.out([:find, key, arg])
  tuple = ts.in([:find_result, key, nil])
  return tuple[2].value


エンジン側

  while true
    tuple = ts.in([:find, nil, nil])
    thread = Thread.new(tuple[2]) { |arg| find_it(arg) }
    ts.out([:find_result, tuple[1], DRbObject.new(thread)])
    trhead.join
  end


それから、最近またThe RWikiのdRubyTutを書き始めました。(気まぐれ)
サンプルはdRuby2, Rinda2で書く予定です。Rindaは2.xで
インターフェイスを変える予定です。

dRubyTut::Rindaのサンプルn-QueenでもTupleSpaceを経由せずに解を
送っています。

* http://rwiki.jin.gr.jp/cgi-bin/rw-cgi.rb?cmd=view;name=dRubyTut%3A%3ARinda