Последствия ограничения RMI одним портом - PullRequest
4 голосов
/ 20 февраля 2012

Я хотел бы иметь возможность ограничить порты, используемые моим приложением, до некоторого минимально известного набора. Приложение использует Java RMI для связи с удаленным сервером. Реестр экспортируется через порт 1099, который является стандартным. Однако кажется, что порт, используемый для экспорта различных удаленных объектов, не всегда согласован, хотя он остается неизменным для нескольких подключений в течение короткого периода времени. Мое необразованное предположение, что за кулисами происходит какое-то кеширование серверных сокетов, которое вызывает это.

Я бы хотел убедиться, что соединение всегда происходит через несколько известных портов, поэтому пользователям, устанавливающим клиентское приложение, необходимо открыть как можно меньше портов в своем брандмауэре. Кажется, что я мог бы сделать это, изменив RMISocketFactory на пользовательскую реализацию и переопределив метод createServerSocket, чтобы всегда использовать известный порт. Однако возникает несколько вопросов:

  • Как это влияет на масштабируемость? Звучит здорово, если бы я знал, что только один человек когда-либо будет подключаться одновременно, но не заблокирует ли это несколько одновременных подключений?
  • Можно ли привязать эти удаленные объекты к тому же порту, что и реестр? Моя интуиция говорит «нет», поскольку порт уже будет связан вызовом createRegistry.
  • Есть ли другие последствия, о которых я ничего не знаю?

1 Ответ

4 голосов
/ 24 февраля 2012

не будет ли блокировать несколько одновременных подключений?

Нет.

Возможно ли привязать эти удаленные объекты к тому же порту, что и реестр??Моя интуиция говорит «нет», поскольку порт уже будет связан вызовом createRegistry().

Да, если вы запускаете реестр в той же JVM, через LocateRegistry.createRegistry() и до тех пор, покапоскольку любые задействованные фабрики сокетов сервера equal().

Есть ли другие последствия, о которых я ничего не знаю?

Никаких последствий вообще нет.RMI осуществляет совместное использование портов между удаленными объектами с нулевыми или равными фабриками сокетов серверов, а TCP - совместное использование портов между несколькими подключениями к одному и тому же порту.

...