2012-02-20 9 views
3

私のアプリケーションで使用されるポートを、可能な限り小さな既知のセットに制限したいと考えています。アプリケーションはJava RMIを使用してリモートサーバーと通信します。レジストリは標準であるポート1099でエクスポートされます。しかし、さまざまなリモートオブジェクトをエクスポートするために使用されるポートは、短期間に複数の接続で同じに留まりますが、常に一貫しているとは限りません。私の無神経な推測では、これを引き起こすシーンの背後にあるサーバーソケットのキャッシュのいくつかの並べ替えがあります。RMIを1つのポートに制限することの含意

クライアントアプリケーションをインストールするユーザーがファイアウォールでできるだけ少ないポートを開く必要があるように、よく知られているいくつかのポートで常に接続が行われるようにしたいと考えています。 RMISocketFactoryをカスタム実装に変更し、常に既知のポートを使用するようにcreateServerSocketメソッドをオーバーライドすることでこれを行うことができるようです。しかし、これはいくつかの質問を提起します:

  • これはスケーラビリティにどのように影響しますか?一度に1人の人しか接続できないことが分かっていれば素晴らしいですが、複数の同時接続をブロックしないでしょうか?
  • これらのリモートオブジェクトをレジストリと同じポートにバインドすることはできますか?ポートはすでにcreateRegistryコールに拘束されているので、私の直感はいいえと言います。
  • 私が気付いていない他の意味がありますか?
+0

これはおそらくあなたの質問の半分に答える必要があります:http://stackoverflow.com/questions/7040986/rmi-exportobjectremote-obj-port-createregistryport – jtahlborn

答えて

3

複数の同時接続をブロックしませんか?

それは、レジストリと同じポート上でこれらのリモートオブジェクトをバインドすることは可能ですか?ポートはすでにcreateRegistry()コールに縛られているので、私の直感はいいえと言います。

はい

、限り、あなたは LocateRegistry.createRegistry()を経由して、同じJVMでレジストリを開始し、そして限り関与任意のサーバソケットファクトリは equal()をしているよう。

私にはわからないことがありますか?

全く意味はありません。 RMIはnullまたは等しいサーバソケットファクトリを持つリモートオブジェクト間のポート共有を行い、TCPは同じポートへの複数の接続間でポート共有を行います。

関連する問題