私のアプリケーションで使用されるポートを、可能な限り小さな既知のセットに制限したいと考えています。アプリケーションはJava RMIを使用してリモートサーバーと通信します。レジストリは標準であるポート1099でエクスポートされます。しかし、さまざまなリモートオブジェクトをエクスポートするために使用されるポートは、短期間に複数の接続で同じに留まりますが、常に一貫しているとは限りません。私の無神経な推測では、これを引き起こすシーンの背後にあるサーバーソケットのキャッシュのいくつかの並べ替えがあります。RMIを1つのポートに制限することの含意
クライアントアプリケーションをインストールするユーザーがファイアウォールでできるだけ少ないポートを開く必要があるように、よく知られているいくつかのポートで常に接続が行われるようにしたいと考えています。 RMISocketFactoryをカスタム実装に変更し、常に既知のポートを使用するようにcreateServerSocket
メソッドをオーバーライドすることでこれを行うことができるようです。しかし、これはいくつかの質問を提起します:
- これはスケーラビリティにどのように影響しますか?一度に1人の人しか接続できないことが分かっていれば素晴らしいですが、複数の同時接続をブロックしないでしょうか?
- これらのリモートオブジェクトをレジストリと同じポートにバインドすることはできますか?ポートはすでに
createRegistry
コールに拘束されているので、私の直感はいいえと言います。 - 私が気付いていない他の意味がありますか?
これはおそらくあなたの質問の半分に答える必要があります:http://stackoverflow.com/questions/7040986/rmi-exportobjectremote-obj-port-createregistryport – jtahlborn