2011-12-21 3 views
-1

Что такое реле в RMI? Я искал поисковые запросы, но не получил удовлетворительных результатов. Я не могу понять роль stub как на клиентском, так и на серверном компьютере, что делает RMI registery после запуска на серверной машине? Когда это основной код сервера, как в следующем:Что такое реле в RMI?

import java.net.*; 
import java.rmi.*; 

public class AddServer { // when is this code executed 
    public static void main(String args[]) { 
    try { 
     AddServerImpl addServerImpl = new AddServerImpl(); 
     Naming.rebind("AddServer",addServerImpl); // what is it doing ? 
    } catch(Exception exc) { 
     System.out.println("Exception : " + exc); 
     } 
    } 
} 

выполнена?

Что такое скелеты в RMI?

я увидел следующее изображение image на википедии, но не может понять, как это делает функция и то, что заглушки и скелета, а когда называется реализация интерфейса?

И кто называет удаленный метод на сервере, который на самом деле называется?

+0

В RMI отсутствует «реле». Остальная часть вашего вопроса - это repost. – EJP

ответ

0

Я не уверен в вашем вопросе, что вы знаете, и о чем вы неясны.

Очень просто:

1) RMI это технология, которая позволяет различным Java процессы в сети общаются друг с другом.

2) Вместо явной отправки сетевых сообщений (например, непосредственно для чтения и записи сокетов) RMI делает его похожим на стандартный вызов метода в программу RMI.

RMI обрабатывает детали упаковки «аргументов метода» от клиента и отправки их по сети, а также сведения о распаковке их на принимающей стороне, чтобы сервер мог их обрабатывать.

Все это происходит «под обложками», прозрачно для клиента и для серверной программы.

3) Клиентская сторона «под обложками» является «заглушкой»; серверная сторона «под обложками» является клиентом. Реестр RMI просто позволяет клиенту «найти» сервер и соответствует правому заглушке с правым скелетом.

4) Время выполнения RMI сервера всегда «прослушивается» (для клиентских запросов), но отдельные серверные объекты вызываются только при необходимости.

5) Вы процитировала картину: а вот полное объяснение (в том числе изображения):

http://en.wikipedia.org/wiki/Java_remote_method_invocation

6) Если вы все еще «не достать», вот еще одна ссылка, которая может помочь :

http://docs.oracle.com/javase/tutorial/rmi/overview.html

--- ADDENDUM 12/21/2011 ---

Вопрос: не могли бы вы объяснить скелет

В: когда вызывается метод Naming.rebind (...)?

В: И что делает заглушка на стороне сервера?

Цитирование свободно от Превосходнейшего Just Java 2, Питер ван дер Линден

1) «RMI» (Remote Method Invocation) означает, что объект в одной системы может вызвать метод в объекте где-нибудь еще на система.

2) Ваш клиентский объект разговаривает с «заглушкой». Это похоже на вызов объекта клиенту, но на самом деле заглушка отвечает за получение входящих аргументов и передачу их на собеседник на серверной машине.

3) Как клиент НАЙТИ Это приятель на серверной машине? Клиент вызывает «java.rmi.Naming.Lookup()».

4) Как серверная машина KNOW о вашем классе серверов RMI? Сервер Java ЗАПОМНИТЬ реестра, вызвав «java.rmi.Naming.bind()».

5) Как знает класс сервера, чтобы получить удаленный вызов вашего клиента? Существует несколько способов, но, надеюсь, вы просто сделали жизнь легкой для себя, выведя свой серверный класс из java.rmi.server.UnicastRemoteObject.

6) Что такое «скелет»? Это серверный аналог «заглушки» клиента. Это просто рутина, которая ничего не делает, кроме как распаковывать данные, которые клиентская заглушка отправляется по сети.

Если все еще неясно, просто введите пример и посмотрите, как он себя ведет.

Запустите его из командной строки и укажите «java -Djava.rmi.server.logCalls = true ...» в командной строке сервера, чтобы увидеть вызовы RMI, которые выполняются.

'Надеюсь, что это поможет!

+0

не могли бы вы объяснить _skeleton_ и когда метод 'Naming.rebind (...)' invoked? Также что делает _stub_ на стороне сервера? –

+0

«Серверная сторона« под обложками »является клиентом? – EJP