dRuby ではサーバ側のホスト指定をしないほうがいい

JavaRMI みたいな分散コンピューティング技術である 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ソースコードの中を彷徨うことになってしまった。皆さんは注意されたい。