dRuby ではサーバ側のホスト指定をしないほうがいい
Java の RMI みたいな分散コンピューティング技術である dRuby。これを使おうとしてはまったポイントがあったのでメモ。
dRuby 自体は涙が出るほど使うのが簡単。
たとえば、同じマシンの上で、server.rb と client.rb と2つ実行ファイルを用意しよう。
# server.rb require 'drb/drb' server = "abc" DRb.start_service("druby://:5000", server) sleep # 待ちうけ状態にするため
# client.rb require 'drb/drb' server = DRbObject.new_with_uri("druby://localhost:5000") puts server.size
これで
% ruby server.rb
としてサーバを起動。シェルの別窓で、
% ruby client.rb
とすると、"3" という出力が見られるはずだ。詳しくは、dRuby 本家を見ていただきたい。
もちろん、dRuby の真骨頂は、マシンの境界を越えたリモートへの呼び出しなわけだが、私はここではまってしまった。結論から言うと、上の server.rb で
DRb.start_service("druby://localhost:5000", server)
とローカルホストを指定するとうまくいかない。つまりここでサーバが listen する IP アドレスを限定してしまうことになるからだ。ソケットプログラミングに詳しい方なら常識だろうが、私は、これを発見するまで小一時間 dRuby のソースコードの中を彷徨うことになってしまった。皆さんは注意されたい。