2013-08-29 3 views
0

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

server = new RemoteServer(); 
registry = LocateRegistry.createRegistry(PORT); 
registry.bind("Remote", server); 

Клиентская часть:

registry = LocateRegistry.getRegistry(HOST, PORT); 
remote = (IRemoteServer) registry.lookup("Remote"); 

Давайте предположим, что удаленный определил некоторый метод doSomething(). Теперь, полагая, что все настроено правильно и работает, я пытаюсь понять, когда именно сделаны TCP-соединения.

  • ли соединение сделал, когда я звоню lookup(), с тем же связь получать повторно каждый раз, когда я называю remote.doSomething()? Если я еще раз вызову lookup(), это создаст второе соединение?
  • Или новое соединение создается каждый раз, когда я звоню remote.doSomething(), а затем срывается потом?

(This question несколько связанных, но это говорит о нескольких потоков, ссылающихся вызов от одного удаленного объекта.)

ответ

2

когда соединение RMI получает создан

Там нет ни одного «Соединение RMI», поэтому вопрос уже плохо сформирован.

ли соединение сделано, когда я называю поиск()

Да, наверное, смотрите ниже.

с тем же соединением, получающим повторное использование всякий раз, когда я вызываю remote.doSomething()?

Возможно, см. Ниже, если удаленный объект находится на одном и том же хосте: порт в качестве реестра; в противном случае обязательно будет новое TCP-соединение.

Если я вызову lookup() второй раз, это создаст второе соединение?

Возможно, см. Ниже.

Или новое соединение создается каждый раз, когда я вызываю remote.doSomething(), а затем срывается потом?

Возможно, нет.

Ничего из этого не указано, но реализация Sun/Oracle имеет пул соединений на стороне клиента под управлением различных RMI system properties, в частности sun.rmi.transport.tcp.threadKeepAliveTime. По умолчанию соединения, которые простаивают более 60 секунд, закрыты. Это было 15 секунд.

+0

сейчас прекратите видеть ниже! –

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