2011-01-31 2 views
1

Я только начинаю изучать Java RMI и считаю, что понимаю процесс, клиент отправляет запросы метода и параметры, сервер выполняет вычисления и отправляет результат возврата обратно.Java RMI и удаленный доступ к файлам

Однако сервер выполняет все действия внутри метода локально?

В частности, если файл прочитан в методе, могу ли я правильно подумать, что это выполняется сервером?

Если это так, есть ли способ для метода конкретно доступа к ресурсам клиента (например, как System.out клиента?)

ответ

2
  1. Если локально, вы имеете в виду на сервере (виртуальном) машина, ответ - да.
  2. Да.
  3. Нет, доступны только значения, явно переданные в качестве аргументов удаленного метода. И вы можете передавать только объекты, которые являются Serializable, а потоки обычно не являются.

Сказав это, клиент также может выступать в качестве сервера, экспортируя свои собственные удаленные объекты, которые могут быть переданы на (другой) сервер, который затем может использовать этот удаленный объект для вызова клиента.

+0

Благодарим вас :) Размышляя об этом, если бы у меня был RMI-метод, принимающий выходной поток, и клиент дал System.out в качестве аргумента сервер мог выполнять операции записи, println() и т. Д. В потоке вывода клиентов? – akd5446

+0

@ akd5446 Нет, вы не можете передавать какой-либо выходной поток, потому что большинство выходных потоков не сериализуемы (ищите раздел «Все реализованные интерфейсы» их javadocs). Еще одна проблема с этим подходом заключается в том, что передача параметров является только одним способом, даже если вы можете передать поток, клиент не увидит изменения. Я предлагаю, чтобы ваш метод возвращал 'byte []' или просто 'String', который вы записываете на сервер. – biziclop

+0

Ах, конечно, они не очень благодарны – akd5446

1

Если я понимаю ваш вопрос, я говорю «да», ваш правильный. По определению (удаленный) метод выполняется на стороне сервера. Клиент просто держит поддельный объект (прокси или заглушку), который делает соединение с сервером, передает аргументы и получает возвращаемое значение для вас.

Подумайте о том, что клиент и сервер работают на разных компьютерах, сервер не знает ничего о ресурсах клиента, если только клиент не выступает в роли сервера.

С уважением

1

Вы можете использовать rmiio легко поток данных через RMI. что я очень сомневаюсь, что вы захотите сделать это с помощью System.out.

Смежные вопросы