レジストリサーバ(rmiregistry)が存在するわけではありません。serverにメッセージを送って、メソッドの代理実行を依頼する。serverを使う場合はこんなイメージになります。server)を起動します。serverに接続する。stubから接続があると自らをforkして子プロセスを生成する。以後、その子プロセスがメッセージの処理を受け持つ。server(子プロセスのほう)に対象のクラスのCREATEメッセージを送信する(request)。instanceと呼ぶ)する。stubに返答する(response)。applicationに戻す。serverに送信する(request)。instanceのメソッドを呼び、その戻り値を得る。stubへ返信される(response)。applicationに返す。instanceを破棄しようとしデストラクタ__destruct()を呼び出す。managerに送信する。stubに返信し(response)、自身のプロセスを破棄する。applicationに戻し、自らが破棄されていく。†クライアント/サーバ間でXML-RPCに準拠したメッセージを投げ合っています。httpは使っていません。serverがただのtcpストリームで通信しています。<methodName>タグを利用してremote_message_server.phpに要求を送信します。methodNameタグは直接的なメソッド名を記述するのではなく、remote_message_server.phpへの操作メッセージを記述します。パラメタでで指定されたクラスのインスタンス生成。インスタンスのmethod_nameを呼ぶ。†PRMPはクライアント/サーバ間でセッションがはられると、対応するインスタンスが破棄されるまで(通常は)その接続を持続します。これにより、メソッド呼び出しを行っていない時間にクライアント/サーバの両方で無駄なリソースを消費させていますが、メソッド呼び出しへの反応は(たぶん)軽量に行われます。メッセージのやりとりのたびにセッションをはる方法(httpなど)のオーバーヘッドとのトレードオフを考慮し、この方法を採用しました。クライアントのインスタンスが存在ししている間はサーバ側のインスタンスも存在しつづけるので、有限ステートマシンの実装も(論理的には)可能です。現状の実装では、クライアント側のインスタンスを維持したまま、接続先のサーバを変更することができますが、これは現時点ではあまりお勧めできません。stubの機能に含まれる可能性があるからです。↑できること、できないこと。†メソッドしか呼べない。インスタンス変数(プロパティ)の変更は対応できない。メソッド呼び出しをおこなう仕組みなので、持続的なストリームの送受信はできない。(メソッドをループで呼び続けて、無理矢理ストリーム的に使うことはできるけど。)複雑なクラスの実装はおこなったことがないので、どこまでちゃんと動くかわからない。デザインパターンによっては実行不可能なものもあるかも。†tcpセッションで送受信の区切りをつける部分がXML-RPCメッセージのタグに依存しているため、PHPの挙動次第では動かなくなる可能性がある。確認済みの環境以外での動作は不明ということ。instanceのmethodのパラメタは常に配列なので、本当の意味で透過的なメソッド実行とはいえない。