2011-06-17 25 views
2

私はJava RMIではなく、同じピアの複数のインスタンスが同じマシン上に存在するアプリケーションのようなTorrent P2Pを作成しようとしています。これは、同じマシン上に登録された同じタイプの複数のリモートオブジェクトを持つことができる必要があることを意味します。 RMIレジストリは、レジストリが参照を返すべきオブジェクトのどれを区別することができないので、どのマシンにでもリモートオブジェクトの実装を1つしか持たせることができないようです。他のピアがそのリモートオブジェクトを公開していることを知っているIPとポートを指定するなど、レジストリをバイパスする方法はありますか?そうでない場合は、同じマシン上に同じオブジェクトの複数のインスタンスを作成する方法がありますか?これを助けてくれれば大いに感謝します...RMIレジストリを使用しないJava RMI

+0

レジストリには、オブジェクトタイプごとのオブジェクトに制限はありませんが、バインド名ごとのオブジェクトには制限がありません。 morja推奨のような新しい名前を使用してください。 –

答えて

3

異なるポートで複数のrmiレジストリを起動するか、オブジェクトのインスタンスを別の名前で複数回バインドすることができます。しかし、最善の方法は、おそらくコード内のロジックを実行し、必要なときにいつも新しいリモートオブジェクトを返すことです。例えば。パラメータに依存:私はあなたがRMIを忘れるためにお勧めし

1

public MyRemoteObject connect(String name) throws java.rmi.RemoteException { 
    if("first".equals(name)){ 
     return firstinstance; 
    }else if("new".equals(name)){ 
     return new MyRemoteObject(); 
    } 
    ... 
} 

またはこのようなものが... - 私見このテクニックは、あなたのユースケースには適用されません。

シリアル化およびデシリアライゼーションロジックを含むネットワークプロトコルを自分自身で定義し、未処理のソケット接続でデータを送受信するために使用します。

+0

私はC#.NET Remotingに慣れているというあなたの提案に同意します。私は、Java RMIのオプションに類似したオプションがあると思いました。ソケットが最善の方法だと思われますが、私はそれらに精通していないので、この学校のプロジェクトは3日以内に予定されています。 (いいえ、私はちょうど私の最後の試み(C + +で)は、高レベルの言語を試して、動作しませんでした)procrastinateしなかったあなたの入力のためにあまりにもありがとう:) – SaxyTimmy