ひとまず今までのところで学んだことを整理することにしました。
dRubyとは
- Rubyのオブジェクトをプロセス間でやり取りするための仕掛け
- dRubyは100%Rubyなので、変数が型に縛られないから楽に使える。IDLとかもいらない
- dRubyはプロセス間通信の仕組み自体もRubyで書かれているので、OSに依存しない
dRubyの仕組み
- URIに対してひとつのオブジェクトを紐付けられる
- 複数のプロトコルを扱える。デフォルトはDRbTCPSocket。自分で追加も可能 URI文字列のパースや、メッセージをやり取りするときにProtocol関係のオブジェクトへ委譲されるため
- サーバー側でどんなオブジェクトを公開してようとも、クライアントが扱えるリモートオブジェクトは常にDRbObject
- DRbObjectを使った呼び出しであっても、自分自身がサーバー側であれば、ローカルのオブジェクトのメソッドを直接呼ぶ
- DRbObjectのmethod_missingからリモート呼び出しをしている
- メッセージの送受信を実際に行っているのはDRbMessage
- サーバーへの接続はDRbConnによってプールされ、接続の確立にかかるコストを抑えている
まだわからないところ
- puts00でサーバー側のPutsからクライアント側の@stdoutに出すにはどうしたらいいの?
- サーバー側は、マルチスレッドで並列にメッセージを処理している? まだmain_loop内を見ていないのでわからない
- fetch_serverのfriendって何?どういうときに使われるの?
- 通信時のMarshalを使った仕組みの詳細
- プールのところにある#FIXMEがなぜFIXMEなのか
- URIのoption引数の使い方、というか使われ方