удаленный и динамический прокси - PullRequest
1 голос
/ 04 декабря 2009
  1. Я понимаю, что когда-то разработка удаленного прокси-сервера включала создание заглушки / скелета, хотя сегодня это больше не требуется благодаря рефлексии. (динамический прокси)

Я хочу получить четкое объяснение того, почему и как отражение заменяет эту потребность. например, я понял, что заглушка должна была обрабатывать связь по сети (в случае, если удаленный объект находится на другом компьютере), а также отвечать за сериализацию / десериализацию и т. д. ... кто отвечает за это сейчас? *

возможно, я неправильно понял концепцию динамического прокси.

  1. Кроме того, я читал об этой теме, касающейся Java и Rmi, как бы я реализовал удаленный прокси в C ++, я, вероятно, могу использовать DCOM, есть ли другой, может быть, более простой способ? (а мне нужна заглушка / скелет в DCom или как Java больше нет?)

спасибо

Ответы [ 2 ]

1 голос
/ 04 декабря 2009

говорят, что у вас есть interface A и class B implements A.

Виртуальная машина сервера имеет один экземпляр B; это связано с именем; сервер прослушивает порт TCP для связи с клиентом. как то так:

Server server = new Server(localhost, port);
server.bind("bbbb", new B() );

на клиентской виртуальной машине вы хотите получить доступ к этому объекту B, находящемуся на серверной виртуальной машине. Вам необходимо получить ссылку (типа А) на нее

A bb = lookup(serverIp, port, "bbbb");

bb - это подкласс A, созданный с помощью java.lang.reflect.Proxy. любой вызов метода на bb обрабатывается InvocationHandler, который кодирует вызов любым способом и отправляет его на сервер по сети. сервер получает запрос «вызова этого метода с этим именем [с этими аргументами] для объекта с именем bbbb», и у сервера не возникает проблем при выполнении этой задачи с отражением. затем возвращаемое значение отправляется обратно клиенту аналогичным образом.

Так что на самом деле не сложно сделать это самостоятельно. RMI от Sun, вероятно, делает то же самое (RMI имеет некоторые другие функции, такие как удаленная сборка мусора). см http://java.sun.com/j2se/1.5.0/docs/guide/rmi/relnotes.html

0 голосов
/ 11 декабря 2009

Если я не ошибаюсь, заглушка / скелет был статически создан инструментом rmic, а теперь весь процесс является динамическим.

Это не то, что это обязательно «лучше», а просто устраняет хлопоты по компиляции заглушки и скелета. В обоих случаях параметры запроса и ответа сериализуются одинаково, практически на одном уровне.

Что касается вопроса № 1: В некоторых реализациях RMI используется Corba, поэтому, если код доступен, вы можете посмотреть на это.

Все, что вам нужно, это связать ваш код C ++ со слоем Corba, как это сделал заглушка / скелет.

...