Я хотел бы иметь возможность ограничить порты, используемые моим приложением, до некоторого минимально известного набора. Приложение использует Java RMI для связи с удаленным сервером. Реестр экспортируется через порт 1099, который является стандартным. Однако кажется, что порт, используемый для экспорта различных удаленных объектов, не всегда согласован, хотя он остается неизменным для нескольких подключений в течение короткого периода времени. Мое необразованное предположение, что за кулисами происходит какое-то кеширование серверных сокетов, которое вызывает это.
Я бы хотел убедиться, что соединение всегда происходит через несколько известных портов, поэтому пользователям, устанавливающим клиентское приложение, необходимо открыть как можно меньше портов в своем брандмауэре. Кажется, что я мог бы сделать это, изменив RMISocketFactory на пользовательскую реализацию и переопределив метод createServerSocket
, чтобы всегда использовать известный порт. Однако возникает несколько вопросов:
- Как это влияет на масштабируемость? Звучит здорово, если бы я знал, что только один человек когда-либо будет подключаться одновременно, но не заблокирует ли это несколько одновременных подключений?
- Можно ли привязать эти удаленные объекты к тому же порту, что и реестр? Моя интуиция говорит «нет», поскольку порт уже будет связан вызовом
createRegistry
.
- Есть ли другие последствия, о которых я ничего не знаю?