RMI — JRMP против IIOP

#java #rmi

#java #rmi

Вопрос:

Я знаю, что JRMP открывает новый сокет для каждого запроса вызова. Кроме того, IIOP может совместно использовать один открытый сокет для нескольких запросов.

Как указано в Википедии:

Использование термина RMI может обозначать исключительно программный интерфейс или может обозначать как API, так и JRMP, тогда как термин RMI-IIOP (читай: RMI вместо IIOP) обозначает интерфейс RMI, делегирующий большую часть функциональности поддерживающей реализации CORBA.

Один из вопросов в моей статье, где я должен был сказать, было ли утверждение истинным / false, гласил:

Серверы RMI совместно используют один сокет для нескольких запросов вызова.

На этом этапе возникла неясность, был ли вопрос исследован, учитывая, что это был сервер JRMP или IIOP. Безопасно ли для меня предполагать, что если в вопросах указан только RMI , то в этом случае это означало бы, что это был сервер
-сервер? В этом случае это означало бы, что это был, а не сервер, работающий на…….

Надеюсь, я ясно выразился.

Комментарии:

1. Нет, предполагать это небезопасно. Вопрос неоднозначен.

2. Кроме того, рассматривали ли вы объединенный вызов RMI, используемый JBoss?

Ответ №1:

Я знаю, что JRMP открывает новый сокет для каждого запроса вызова.

Нет, это не так. Клиент RMI использует пул соединений.

Как указано в Википедии:

Использование термина RMI может обозначать исключительно программный интерфейс или может обозначать как API, так и JRMP, тогда как термин RMI-IIOP (читай: RMI вместо IIOP) обозначает интерфейс RMI, делегирующий большую часть функциональности поддерживающей реализации CORBA.

Я считаю, что это утверждение вводит в заблуждение, и я исправил его. Новая формулировка гласит, что термин ‘RMI’ может относиться к API или любой реализации, включая JRMP, IIOP, JERI, удаленное управление JBoss, …, тогда как ‘RMI-IIOP’ конкретно относится к RMI поверх IIOP.

Серверы RMI совместно используют один сокет для нескольких запросов вызова.

Утверждение неоднозначно, вводит в заблуждение и зависит от реализации.

Безопасно ли для меня предполагать, что если в вопросах указан только RMI, то в этом случае это означало бы, что это был сервер JRMP, а не сервер IIOP?

Нет. Но в данном случае это не имеет никакого значения.

Ответ №2:

Нет, RMI может совместно использовать сокеты или создавать их по мере необходимости в зависимости от реализации клиента RMI. Такое радикальное утверждение было бы неверным.

Комментарии:

1. @Pavitar: Но этот ответ неверен. Он вообще этого не делает.

2. В вашем ответе указано «Нет [он не будет совместно использовать сокет]» и «он будет [мой акцент] создавать новый клиентский сокет для каждого запроса». Как вы правильно указали в своем комментарии, это зависит от реализации. Итак, ‘no’ и ‘will’ оба неверны. Это могло бы. Но этого не произойдет. Я никогда не видел реализацию RMI / JRMP или RMI / IIOP (или RMI / JERI), которая делает это, за 14 лет

3. И это зависит от реализации клиента RMI, а не от сервера.

4. @Mikaveli На клиенте реализован пул соединений RMI. Это единственное место, где это может быть реализовано. Подумайте об этом. Тогда, если вы не согласны, пожалуйста, предоставьте свою собственную ссылку. Моя ссылка — java.rmi: Руководство по удаленному вызову методов на Java, Pitt amp; McNiff, 2001, но тогда я все-таки написал это.

5. community.jboss.org/wiki/Invokers Средство вызова JRMP создает новый клиентский сокет для каждого запроса, который он выполняет от клиента к серверу.