SlideShare a Scribd company logo
1 of 35
Download to read offline
МАИ, каф 806, Сети ЭВМ 
Технология взаимодействия.NET REMOTING 
1
МАИ, каф 806, Сети ЭВМ 2 
.NET Remoting 
Средство взаимодействие .NET приложений; 
Позволяет реализовывать распределенные приложения «не задумываясь» о реализации алгоритмов сетевого обмена; 
Имеет архитектуру клиент-сервер; 
Может работать поверх разных протоколов (channel). Сейчас существует поддержка TCP и HTTP. 
 TCP -большая скорость; 
 HTTP -позволяет обойти firewall (работает поверх SOAP); 
Дает возможность пересечение границ доменов 
 .NET Remotingпозволяет объектам, исполняющимся внутри разных доменов приложений и контекстов, взаимодействовать друг с другом через границы .NET Remoting. 
 С точки зрения инфраструктуры .NET Remotingобъекты разделяются на две категории: дистанцируемые(remotable) и недистанцируемые(nonremotable).
МАИ, каф 806, Сети ЭВМ 
Домены и границы 
Домены приложенийДомен приложения можно рассматривать как логический процесс. Мы говорим так потому, что один процесс Win32 способен содержать более одного домена приложений. Код и объекты, исполняющиеся в одном домене приложения, не имеют непосредственного доступа к коду и объектам, исполняющимся в другом домене приложения. Это обеспечивает защиту, так как сбой в одном домене приложения не влияет на другие домены приложения в том же процессе. Разделение между доменами приложения формирует границу .NET Remoting. 
3
МАИ, каф 806, Сети ЭВМ 
Типы данных 
Недистанцируемые типыНе всякий тип —дистанцируемый. Экземпляры недистанцируемых типов не могут пересекать границы .NET Remoting ни при каких условиях. При попытке передать экземпляр недистанцируемого типа другому домену приложения или контексту, инфраструктура .NET Remoting сгенерирует исключение. Более того, экземплярам объектов, расположенных вне домена приложения или контекста, содержащего экземпляр объекта недистанцируемого типа, не удастся получить непосредственный доступ к этому экземпляру. 
Дистанцируемые типыРазные категории дистанцируемых типов либо проникают сквозь границы .NET Remoting, либо доступны через эти границы. .NET Remoting определяет две категории дистанцируемых типов: передаваемые по значению (marshal-by-value), передаваемые по ссылке (marshal-by- reference) . 
4
МАИ, каф 806, Сети ЭВМ 5 
.NET Remoting 
Клиент вызывает Proxy на клиентской стороне. 
Proxy обращается к транспортному уровню в соответствии с выбранным каналом. 
Данные передаются на сервер. 
В зависимости от того как создан сервер Singlecall или Singleton создается новый серверный объект или вызывается существующий. 
Результат вызова передается на транспортный уровень. 
Данные передаются на клиент. 
В соответствии с выбранным каналом данные распаковываются. 
Proxy возвращает ответ клиенту.
МАИ, каф 806, Сети ЭВМ 
Передача по значению 
Экземпляры типов, передаваемых по значению, пересекают границы .NET Remotingс помощью процесса, известного под названием сериализация. Сериализация—это процесс представления текущего состояния обьектав виде последовательности бит. 
После того как обьектсериализован, инфраструктура .NET Remotingпересылает полученную последовательность бит через границы .NET Remotingв другой домен приложения или контекст, где инфраструктура выполняет их десериализациюв экземпляр типа, содержащий точную копию первоначального состояния. В .NET тип считается сериализуемым, если он объявлен с атрибутом Serializable. В следующем фрагменте кода данный атрибут используется для объявления класса сериализуемым: 
[Serializable] 
classSomeSerializableClass 
6
МАИ, каф 806, Сети ЭВМ 
Передача по ссылке[1/3] 
В некоторых случаях передача по значению —это то, что надо. Но иногда необходимо, чтобы все вызовы объекта, созданного в некотором домене приложения, обращались именно к экземпляру в данном домене, а не к его копии в другом домене. Например, объекту могут требоваться ресурсы, доступные только объектам, исполняющимся на данном компьютере. В этих случаях используются типы, передаваемые по ссылке, для которых инфраструктура ,NET Remoting передает ссылку на экземпляр объекта, а не его сериализооанную копию. .NET Framework требует, чтобы типы, передаваемые по ссылке, наследовали от System.MarshatByRefObject. Простое наследование от этого класса обеспечивает возможность удаленного доступа к экземплярам производного типа. Ниже показан фрагмент объявления типа, передаваемого по ссылке: classSomeMBRType : MarshalByRefQbject 
7
МАИ, каф 806, Сети ЭВМ 
Передача по ссылке[2/3] 
8 
приложение №1 
приложение №2 
алгоритм №1 
объект №1 
заглушка объекта №1 
по сети
МАИ, каф 806, Сети ЭВМ 
Передача по ссылке[3/3] 
В этих случаях инфраструктура .NET Remoting задействует средства, предоставляемые типом System.Runtime.Remoting.ObjRef 
Маршалинг —это процесс передачи ссылки на объект из одного подразделения .NET Remoting в другое. Для маршалинга ссылкина объект, передаваемый по ссылке из одного подразделения вдругое, инфраструктура .NET Remoting выполняет следующиедействия: 
 создает экземпляр ObRef, который полностью описывает предаваемый по ссылке объект; 
 сериализует ObjRef в виде потока бит; 
 пересылает сериализованный ObjRef в целевое подразделе-ние .NET Remoting. 
При получении сериализованного ObjRef инфраструктура .NETRemoting на принимающей стороне выполняет следующие действия: 
 десериализует ObjRef и создает экземпляр класса ObjRef; 
 по информации из ObjRef создает объект-прокси и, посредствомкоторого клиент может обращаться к удаленному объекту. 
9
МАИ, каф 806, Сети ЭВМ 10 
.NET Remoting 
Выбор приложения-хоста для сервера, которое будет прослушивать выбранный channel. 
 Service 
 Console 
 Win Forms 
Выбор различных моделей активации: 
 SingleCall -объект не хранит состояния и может обработать только один вызов от клиента. 
 Singleton -к одному объекту могут обращаться различные клиенты. 
 Клиентская активация 
Способы конфигурации сервера: 
 Конфигурация из кода. 
 Конфигурация из конфигурационного файла. 
Способ представления клиенту информации об интерфейсе. 
 Интерфейсная DLL 
 Для HTTP каналов использование soapsuds.exe утилиты Visual Studio для генерации прокси. 
•Пример вызова: 
SOAPSUDS -url:http://localhost/Trader/StockQuote.soap?wsdl -oa:StockQuote.dll
МАИ, каф 806, Сети ЭВМ 
Серверная активация 
RemotingConfiguration.RegisterWellKnownServiceType 
В терминах инфраструктуры .NET Remoting типы, активизируемые сервером, называются общеизвестными (well-known) типами, так как прежде чем активизировать экземпляры объекта серверное приложение публикует такой тип при помощи общеизвестного URI (Uniform Resource Identifier). Серверный процесс, в котором находится дистанцируемый тип, отвечает за конфигурирование данного типа как общеизвестного, публикуя его по определенным общеизвестным конечным точкам или адресам и активизируя экземпляры типа только при необходимости. .NET Remoting поддерживает два режима серверной активизации: 
11 
КлиентСерверКлиентСерверКлиентСерверКлиентСерверКлиентКлиентSingle CallSingleton
МАИ, каф 806, Сети ЭВМ 
Режим Singleton 
В отдельный момент времени может быть активен не более чем один экземпляр типа, сконфигурированного в режиме Singleton. 
Единственный экземпляр активизируется при первом обращении к нему клиента в отсутствие другого экземпляра. Пока этот экземпляр активен, он обрабатывает все последующие запросы, как от того же клиента, так и от других. Экземпляр типа Singletonспособен сохранять состояние в промежутке между вызовами его методов. 
Ниже показан пример программного конфигурирования объектного типа в режиме Singletonв серверном приложении, которое реализует этот дистанцируемыйобъектный тип: RemotingConfiguration. RegisterWellKnownServiceType(typeof( SomeMBRType), "SomeURI", WellKnownObjectMode,Singleton); 
Клиент так же должен сконфигурировать SomeMBRTypeкак общеизвестный объект в режиме Singleton, это показано ниже: RemotingConfiguration.RegisterWellKnownClientType(typeof(SomeMBRType),"http://SomeWellKnownURL/SomeURI" ); 
12
МАИ, каф 806, Сети ЭВМ 
Режим SingleCall 
Второй режим серверной активизации —SingleCall —обеспечивает поддержку модели программирования без сохранения состояния. 
Для типа, сконфигурированного как SingleCall, инфраструктура .NET Remoting будет активизировать новый экземпляр при каждом вызове клиентом метода этого типа. 
После того как вызов метода обработан, инфраструктура .NET Remoting делает экземпляр типа доступным сборщику мусора. 
Следующий фрагмент кода демонстрирует программный способ конфигурирования дистанцируемого объектного типа в режиме SingleCall в приложении, которое реализует этот дистанцируемыйобъектный тип: RemotingConfiguration.RegisterWellKnownServiceType(typeof( SomeMBRType ), "SomeURI", WellKnownObjectMode.SingleCall ); 
13
МАИ, каф 806, Сети ЭВМ 
Клиентская активизация 
В некоторых случаях необходимо, чтобы каждый клиент работал с отдельным экземпляром удаленного объекта. Для этой цели .NET Rernoting предоставляет клиентскую активизацию. В отличие от общеизвестных типов с серверной активизацией, инфраструктура .NET Remoting назначает URI каждому экземпляру типа с клиентской активизацией. 
Экземпляры типов с клиентской активизацией могут оставаться активными в промежутках между вызовами методов и использовать ту же схему управления временем жизни, что и типыSingleton. Однако, вместо того чтобы обрабатывать все клиентские запросы с помощью единственного экземпляра типа, здесь ссылка каждого клиента отображается на отдельный экземпляр дистанцируемого типа. 
Ниже приведен пример программной конфигурации дистанцируемого объектного типа как активизируемого клиентом в приложении, которое реализует этот дистанцируемый объектный тип: RemotingConfiguration.RegisterActivatedServiceType(typeof( SomeMBRType )); 
Соответствующий конфигурационный код в клиентском приложении будет таким: RemotingConfiguration.RegisterActivatedClientType(typeof( SomeMBRType ),"http://SomeURL"); 
14
МАИ, каф 806, Сети ЭВМ 15 
.NET Remoting. Алгоритм создания сервера 
Подключение System.Runtime.Remotingв Reference. 
Класс сервера должен быть наследником MarshalByRefObject 
Создаем интерфейс, который будет реализовывать серверный объект и помещаем его в отдельной dll. 
В приложении-хосте подключаем следующие namespace 
 System.Runtime.Remoting; 
 System.Runtime.Remoting.Channels; 
 System.Runtime.Remoting.Channels.Http; 
Пишем метод, который конфигурирует Remotingсервер: 
HttpChannelmyChannel= new HttpChannel(8080);//создаем серверный канал 
ChannelServices.RegisterChannel(myChannel,false); 
RemotingConfiguration.RegisterWellKnownServiceType(typeof(MyServiceClass) ,"MyServiceName.rem",WellKnownObjectMode.Singleton);
МАИ, каф 806, Сети ЭВМ 16 
.NET Remoting. Server Host. Пример 
1.using System; 
2.using System.Collections.Generic; 
3.using System.ComponentModel; 
4.using System.Data; 
5.using System.Drawing; 
6.using System.Text; 
7.using System.Windows.Forms; 
8.using System.Runtime.Remoting; 
9.using System.Runtime.Remoting.Channels; 
10.using System.Runtime.Remoting.Channels.Tcp; 
11.namespaceLab2RemotingApp 
12.{ 
13.publicpartialclassForm1 : Form 
14.{ 
15.publicForm1() 
16.{ 
17.InitializeComponent(); 
18.} 
19. 
20.privatevoidbutton1_Click(objectsender, EventArgs e) 
21.{ 
22.TcpChannel myChannel = new TcpChannel(25701); 
23.ChannelServices.RegisterChannel(myChannel,false); RemotingConfiguration.RegisterWellKnownServiceType(typeof(Lab2RemotingService.HelloWorld), 
24."HelloWorld.rem", 
25.WellKnownObjectMode.SingleCall); 
26. 
27.} 
28.} 
29.}
МАИ, каф 806, Сети ЭВМ 17 
.NET Remoting. Клиент 
Подключение System.Runtime.Remotingв Reference. 
Подключаем сборку с интерфейсом в зависимые сборки; 
В приложении-хосте подключаем следующие namespace 
 System.Runtime.Remoting; 
 System.Runtime.Remoting.Channels; 
 System.Runtime.Remoting.Channels.Http; 
Пишем код, инициализирующий каналы: 
 HttpChannelmyChannel= new HttpChannel(); // создаем клиентский канал 
 ChannelServices.RegisterChannel(myChannel,false); 
Пишем код, осуществляющий вызов: 
IMyServiceClassobj= (IMyServiceClass)Activator.GetObject(typeof(IMyServiceClass),"http://localhost:8080/MyServiceName.rem",WellKnownObjectMode.Singleton);
МАИ, каф 806, Сети ЭВМ 18 
.NET Remoting. Клиент. Пример 
1.using System; 
2.using System.Collections.Generic; 
3.using System.ComponentModel; 
4.using System.Data; 
5.using System.Drawing; 
6.using System.Text; 
7.using System.Windows.Forms; 
8. 
9.namespace Lab2Client 
10.{ 
11.public partial class Lab2Form : Form 
12.{ 
13.public Lab2Form() 
14.{ 
15.InitializeComponent(); 
16.} 
17. 
18.private void button1_Click(object sender, EventArgs e) 
19.{ 
20.String szURL="tcp://localhost:25701/HelloWorld.rem"; 
21.Lab2RemotingService.IHelloWorld objLab2Service = 
22.(Lab2RemotingService.IHelloWorld) Activator.GetObject(typeof(Lab2RemotingService.IHelloWorld),szURL); 
23. 
24.this.richTextBox1.Text = objLab2Service.doHelloWorld(); 
25.} 
26.} 
27.}
МАИ, каф 806, Сети ЭВМ 19 
.NET Remoting. Сервер 
Использование файла конфигурации 
App.Config 
1.<system.runtime.remoting> 
2.<application> 
3.<channels> 
4.<channel ref="tcp" port="25701"> 
5.<serverProviders> 
6.<formater ref=“binary”/> 
7.</serverProviders> 
8.</channel> 
9.</channels> 
10.<service> 
11.<wellknown mode="SingleCall" 
12.type="Lab2RemotingService.HelloWorld,Lab2RemotingService" 
13.objectUri="HelloWorld.rem"/> 
14.</service> 
15.</application> 
16.<customErrors mode="off"/> 
17.</system.runtime.remoting> 
Пишем код для конфигурирования 
 RemotingConfiguration.Configure(AppDomain.CurrentDomain.SetupInformation.ConfigurationFile,false);
МАИ, каф 806, Сети ЭВМ 
Реализация CallBack 
Для реализации Callback необходимо: 
 На клиенте реализовать объект –наследник MarchalByRefObject, который пердатьна сервер в качестве параметра. 
 Разрешить инфраструктуре .NET стерилизовать MBR объекты. Для этого нужно явно указать форматеру уровень фильтрации (на клиенте и сервере): 
BinaryServerFormatterSinkProviderprovider = new BinaryServerFormatterSinkProvider(); 
provider.TypeFilterLevel= TypeFilterLevel.Full; 
 Зарегистрировать на клиенте канал, для обратных вызовов: IDictionaryprops = new Hashtable(); 
props["port"] = 0; TcpChannelchan= new TcpChannel(props, null, provider); 
20
МАИ, каф 806, Сети ЭВМ 21 
.NET Remoting. Правила использования 
Передача параметров вызова по значению или по ссылке? 
Размер передаваемых объектов? 
 Данные передаются в пакетном (а не в потоковом режиме), т.е. для отправки данных они вначале полностью загружаются в память. 
Все ли поля объектов надо передавать? 
 Для тех, которые не надо нужно использовать атрибут NonSerialized 
Как часто необходимо передавать объекты? 
 Нужно минимизировать число удаленных вызовов. 
Сколько клиентов Singleton объект может поддерживать? 
 Необходимо определить максимальное число клиентов, и использовать несколько серверов. 
Как долго серверный объект будет хранить состояние? 
Могут ли объекты с состояниями использоваться для повышения производительности? 
Будут ли использоваться фаирволы между сервером и клиентом. 
 Влияет на выбор канала HTTP/TCP. 
Будут ли осуществляться обратные вызовы со стороны клиента? 
Как будет производится замена версии сервера в случае если режим его работы 24 на 7?
МАИ, каф 806, Сети ЭВМ 22 
.NET Remoting. Асинхронный вызов 
1.usingSystem; 
2.usingSystem.Reflection; 
3.usingSystem.Runtime.Remoting; 
4.usingSystem.Runtime.Remoting.Channels; 
5.usingSystem.Runtime.Remoting.Channels.Http; 
6.usingSystem.Runtime.Remoting.Channels.Tcp; 
7.usingSystem.Runtime.Remoting.Messaging; 
8.usingRemotingInterface; 
9.namespaceRemotingClient 
10.{ 
11.classClient 
12.{ 
13.delegateComplexObject RemoteAsyncDelegate(String stringParam, int intParam, double doubleParam, string[] arrayParam); 
14.RemoteAsyncDelegate del = null; 
15.[OneWay] 
16.publicvoidOurCallBack(IAsyncResultres) 
17.{ 
18.Console.WriteLine("AsyncResult " + ((ComplexObject)del.EndInvoke(res)).stringParam); 
19.} 
20.publicvoidStart() 
21.{ 
22.Stringurl = "tcp://localhost:25701/MyServer.rem"; 
23.IServer srv = (IServer)Activator.GetObject(typeof(IServer), url); 
24.AsyncCallbackRemoteCallback = new AsyncCallback(this.OurCallBack); 
25.del = new RemoteAsyncDelegate(srv.doSomething); 
26.IAsyncResultRemAr = del.BeginInvoke("Hello world",1,1,new String[0],RemoteCallback,null); 
27.RemAr.AsyncWaitHandle.WaitOne(); 
28.Console.WriteLine("Done"); 
29.} 
30.} 
31.}
МАИ, каф 806, Сети ЭВМ 
Удаленный сборщик мусора! 
23
МАИ, каф 806, Сети ЭВМ 
Лицензия объекта 
Для управления временем жизни удаленных объектов .NET Remoting использует вариант распределенной сборки мусора на основе лицензий (lease). Чтобы понять причину выбора подобной схемы управления временем жизни, рассмотрим случай взаимодействия множества клиентов с удаленным объектом, активизируемым сервером в режиме Singleton. Схемы управления временем жизни, не использующие лицензии, могут применять для определения необходимости ликвидации такого объекта сочетание опроса клиентов и подсчета ссылок. Число ссылок соответствует числу подключенных клиентов, тогда как опрос гарантирует, что клиенты все еще функционируют. В подобной схеме сетевой трафик, связанный с опросом клиентов, иногда негативно сказывается на общей работе распределенного приложения. В противоположность этому система управления временем жизни на основе лицензий использует лицензии, спонсоров и диспетчер лицензий. Отсутствие в данной схеме опроса позволяет повысить общую производительность 
Лицензия —это объект, инкапсулирующий значения TimeSpan, используемые инфраструктурой .NET Remoting для управления временем жизни удаленного объекта. Для реализации этой функциональности инфраструктура .NET Remoting предоставляет интерфейс ILease. Когда CLR активизирует экземпляр общеизвестного объекта Singleton или удаленного объекта с клиентской активизацией, она запрашивает у объекта срок лицензии, вызывая его метод InitializeLHetimeSetvices, наследуемый от System.МаrshalByRet'Object. 
24
МАИ, каф 806, Сети ЭВМ 25 
.NET Remoting. Лицензия объекта 
Необходимо переопределить метод InitializeLifetimeService 
Необходимо написать код для инициализации параметров жизненного цикла объекта: 
1.usingSystem.Runtime.Remoting.Lifetime; 
2.... 
3.publicoverrideObjectInitializeLifetimeService() 
4.{ 
5.ILease lease=(ILease)base.InitializeLifetimeService(); 
6.if(lease.CurrentState== LeaseState.Initial) 
7.{ 
8.lease.InitialLeaseTime = TimeSpan.FromSeconds(5);// время, после которого можно помещать в мусор, 0 -бесконечность; 
9.lease.RenewOnCallTime = TimeSpan.FromSeconds(1);//время, на которое продляется жизнь при вызове; 
10.lease.SponsorshipTimeout = TimeSpan.FromSeconds(5);//время ожидания ответа от спонсора на клиенте (для этого нужно на клиенте зарегистрировать серверный канал) 
11.} 
12.returnlease; 
13.} 
14...
МАИ, каф 806, Сети ЭВМ 
Диспечер лицензий 
В каждом домене приложения имеется диспетчер лицензий, управляющий лицензиями экземпляров дистанцируемых объектов этого домена. При активизации удаленного объекта инфраструктура .NET Remoting передает его лицензию диспетчеру лицензий. 
Диспетчер периодически просматривает список лицензий, сравнивая время окончания действия лицензий с текущим временем. По умолча-нию диспетчер лицензий выполняет проверку окончания лицензий каждые 10 секунд, но периодичность опроса можно изменить (LifetimeServices.LeaseManagerPollTime=System.TimeSpan.FromMinutes(5);). 
Каждая лицензия, срок действия которой истек, уведомляется об этом диспетчером лицензий, после чего лицензия пытается продлить себя, опрашивая своих спонсоров. Если у лицензии нет спонсоров или никто из них не продлил ее, то лицензия отменяет себя, выполняя следующие действия: 
 устанавливает свое состояние в System.Runtime.Remoting.Lifetime.LeaseState.Expired; 
 уведомляет диспетчер лицензий о том, что ее следует удалитьиз таблицы лицензий; 
 отключает удаленный объект от инфраструктуры .NET Remoting; 
 отключает объект-лицензию от инфраструктуры .NET Remoting. 
26
МАИ, каф 806, Сети ЭВМ 
Спонсоры 
Спонсоры —это объекты, которые могутпродлить лицензии удаленных объектов. Для создания типа, способного выступать в качестве спонсора, необходимо реализоватьинтерфейс ISponsor. 
ClientSponsorв пространстве имен System.Runtime.Remoting.Lifetime, который вы вправе использовать в своих программах. Этоткласс является производным от System.MarshalByRefObject иреализует интерфейс ISponsor. 
//Использование класса ClientSponsor : предполагается, 
// что someMBR ссылается на экземпляр типа, 
// производного от MarshalByRefObject. 
// спонсор будет продлять время ссылки на 5 минут 
ClientSponsorcp = new ClientSponsor(TimeSpan.FromMinutes(5)); 
MyClassobj= new MyClass(); 
ILeaselease = (ILease)RemotingServices.GetLifetimeService(obj); 
lease.Register(cp); 
27
МАИ, каф 806, Сети ЭВМ 
Java.RMI 
ЛокальныйJava-объект 
Удаленный Java-объект 
Определение объекта 
Локальный объект определяется при помощи класса Java. 
Экспортируемое поведение удаленного объекта определяется при помощи интерфейса, который должен быть расширен из интерфейса Remote. 
Реализация объекта 
Локальный объект реализуется своим классом Java. 
Поведение удаленного объекта определяется классом Java, который реализует удаленный интерфейс. 
Создание объекта 
Новый экземпляр локального объекта создается оператором new. 
Новый экземпляр удаленного объекта создается на компьютере хоста оператором new. Клиент не может непосредственно создать новый удаленный объект (если не использует технологию Java 2 Remote Object Activation). 
Доступ к объекту 
Доступ к локальному объекту осуществляется непосредственно через переменную-ссылку на объект. 
Доступ к удаленному объекту осуществляется через переменную-ссылку на объект, указывающую на реализацию замещающей заглушки удаленного интерфейса. 
Активные ссылки 
В одной JVM, объект считается "живым", если существует хотя бы одна ссылка на него. 
В распределенной среде удаленная JVM может разрушиться, и сетевое соединение может быть потеряно. Считается, что удаленный объект имеет активную удаленную ссылку на него, если к нему производился доступ в течение определенного периода времени (срока аренды). Если все удаленные ссылки были удалены явно, или если у всех удаленных ссылок закончился срок аренды, тогда удаленный объект становится доступен для удаленной сборки мусора. 
Сборка мусора 
При удалении всех локальных ссылок на объект, он становится кандидатом на удаление сборщиком мусора. 
Удаленный сборщик мусора работает совместно с локальным. Если нет удаленных ссылок и удалены все локальные ссылки на объект, он становится кандидатом для сборщика мусора в обычном значении этого понятия. 
28
МАИ, каф 806, Сети ЭВМ 29 
RMI.Java. Порядок создания распределенного приложения 
Сервер 
 Написание Удалённого интерфейса наследника java.rmi.Remote 
 Написание класса-сервера Реализующего удалённый интерфейс 
 Написание кода отвечающего за регистрацию сервера в службе каталогов 
 Создание Скелетных компонент и Заместителя с помощью утилиты rmic.exeиз Sun JDK 
 Изменение переменной среды CLASSPATH (внести путь к классам сервера) 
 Запуск Сервера 
•Запуск брокера запросовrmiregistry.exeиз состава Sun JDK 
•Запуск сервера 
Клиент 
 Написание клиента использующего удалённый интерфейс. 
 Написание кода осуществляющего подключение к удалённому серверу 
 Запуск Клиента
МАИ, каф 806, Сети ЭВМ 
Как клиент находит удаленную службу RMI? 
Клиенты находят удаленные службы, используя службу имен или каталогов. 
RMI может использовать много различных служб каталогов, включая Java Naming and Directory Interface (JNDI). RMI и сама включает в себя простую службу, называемую реестром RMI, rmiregistry. Реестр RMI работает на каждой машине, содержащей объекты удаленных служб и принимающей запросы на обслуживание, по умолчанию используя порт 1099. 
На хосте программа сервера создает удаленную службу, предварительно создавая локальный объект, реализующий эту службу. Затем она экспортирует этот объект в RMI. Как только объект экспортирован, RMI создает службу прослушивания, ожидающую соединения с клиентом и запроса службы. После экспорта, сервер регистрирует объект в реестре RMI, используя общедоступное имя. 
На стороне клиента к реестру RMI доступ обеспечивается через статический класс Naming. Он предоставляет метод lookup(), который клиент использует для запросов к реестру. Метод lookup() принимает URL, указывающий на имя хоста и имя требуемой службы. Метод возвращает удаленную ссылку на обслуживающий объект. URL принимает следующий вид: 
rmi://<host_name> [:<name_service_port>] /<service_name> 
где host_name -это имя, распознаваемое в локальной сети (LAN), или DNS-имя в сети Internet. Необходимо только указать name_service_port, если служба имен исполняется на порте, отличном от принимаемого по умолчанию 1099. 
30
МАИ, каф 806, Сети ЭВМ 
RMI Compiler 
rmic<options> <class names> 
where <options> includes: 
-keep Do not delete intermediate generated source files 
-keepgenerated (same as "-keep") 
-g Generate debugging info 
-depend Recompile out-of-date files recursively 
-nowarn Generate no warnings 
-verbose Output messages about what the compiler is doing 
-classpath <path> Specify where to find input source and class files 
-d <directory> Specify where to place generated class files 
-J<runtime flag> Pass argument to the java interpreter 31
МАИ, каф 806, Сети ЭВМ 32 
Java.Server.Пример интерфейса 
1.import java.rmi.Remote; 
2.import java.rmi.RemoteException; 
3. 
4.public interface ILab3Interface extends Remote 
5.{ 
6.public int[] doHelloWorld(int[] src) throws RemoteException; 
7.}
МАИ, каф 806, Сети ЭВМ 33 
Java.Server.Пример 
1.import java.rmi.Naming; 
2.import java.rmi.RemoteException; 
3.import java.rmi.RMISecurityManager; 
4.import java.rmi.server.UnicastRemoteObject; 
5. 
6.public class Lab3Server extends UnicastRemoteObjectimplements ILab3Interface 
7.{ 
8.public Lab3Server() throws RemoteException{super();} 
9.public static void main(String[] args) 
10.{ 
11.try { 
12.Naming.rebind("Lab3Server", new Lab3Server()); 
13.System.out.println("Server bound in registry"); 
14.} catch (Exception e) {e.printStackTrace();} 
15.} 
16.public int[] doHelloWorld(int[] src) throws RemoteException 
17.{ 
18.int[] result = new int[src.length]; 
19.for(int i=0;i<src.length;i++)result[i]=src[src.length-i-1]; 
20.return result; 
21.} 
22.}
МАИ, каф 806, Сети ЭВМ 34 
Java.Client.Пример 
1.import java.rmi.Naming; 
2.import java.rmi.RemoteException; 
3. 
4.public class Lab3Client { 
5.public static void main(String[] args) { 
6. 
7.try{ 
8.ILab3Interface server = (ILab3Interface) Naming.lookup("rmi://localhost/Lab3Server"); 
9. 
10.int src[]=new int[] {1,2,3,4,5}; 
11.int ret[] = server.doHelloWorld(src); 
12.System.out.println("Result:"); 
13.for(int i=0;i<ret.length;i++) System.out.println("["+i+"]="+ret[i]); 
14. 
15.}catch(Exception e) 
16.{ 
17.e.printStackTrace(); 
18.} 
19.} 
20.}
МАИ, каф 806, Сети ЭВМ 
Клиентские обратные вызовы RMI 
RMI работает одинаково хорошо между всеми компьютерами. Однако, расширение клиентом java.rmi.server.UnicastRemoteObjectможет быть не практичным. В этих случаях удаленный объект может подготовить себя для удаленного использования, вызвав статический метод java.rmi.server.RemoteStubUnicastRemoteObject.exportObject (Remote<remote_object>). 
Далее передаем клиентский объект в качестве параметра серверу. 
Сервер может вызывать клиентский объект. 
35

More Related Content

What's hot

Java осень 2014 занятие 3
Java осень 2014 занятие 3Java осень 2014 занятие 3
Java осень 2014 занятие 3Technopark
 
C++ STL & Qt. Занятие 05.
C++ STL & Qt. Занятие 05.C++ STL & Qt. Занятие 05.
C++ STL & Qt. Занятие 05.Igor Shkulipa
 
Java осень 2014 занятие 6
Java осень 2014 занятие 6Java осень 2014 занятие 6
Java осень 2014 занятие 6Technopark
 
Windows Azure and node js
Windows Azure and node jsWindows Azure and node js
Windows Azure and node jsAlex Tumanoff
 
Aleksey Mashanov Rit
Aleksey  Mashanov RitAleksey  Mashanov Rit
Aleksey Mashanov Ritrit2010
 
Проектирование программных систем. Занятие 10
Проектирование программных систем. Занятие 10Проектирование программных систем. Занятие 10
Проектирование программных систем. Занятие 10Dima Dzuba
 
Объектно-ориентированное программирование. Лекция 5 и 6
Объектно-ориентированное программирование. Лекция 5 и 6Объектно-ориентированное программирование. Лекция 5 и 6
Объектно-ориентированное программирование. Лекция 5 и 6Dima Dzuba
 
Библиотеки для передачи данных (Lecture 13 – multithreading, network (libs))
Библиотеки для передачи данных (Lecture 13 – multithreading, network (libs))Библиотеки для передачи данных (Lecture 13 – multithreading, network (libs))
Библиотеки для передачи данных (Lecture 13 – multithreading, network (libs))Noveo
 
Многопоточность, работа с сетью (Lecture 12 – multithreading, network)
Многопоточность, работа с сетью (Lecture 12 – multithreading, network)Многопоточность, работа с сетью (Lecture 12 – multithreading, network)
Многопоточность, работа с сетью (Lecture 12 – multithreading, network)Noveo
 
C++ STL & Qt. Занятие 02.
C++ STL & Qt. Занятие 02.C++ STL & Qt. Занятие 02.
C++ STL & Qt. Занятие 02.Igor Shkulipa
 
Java Core. Lecture# 5. Concurrency.
Java Core. Lecture# 5. Concurrency.Java Core. Lecture# 5. Concurrency.
Java Core. Lecture# 5. Concurrency.Anton Moiseenko
 
Java осень 2014 занятие 7
Java осень 2014 занятие 7Java осень 2014 занятие 7
Java осень 2014 занятие 7Technopark
 
C++ STL & Qt. Занятие 03.
C++ STL & Qt. Занятие 03.C++ STL & Qt. Занятие 03.
C++ STL & Qt. Занятие 03.Igor Shkulipa
 
Java весна 2014 лекция 5
Java весна 2014 лекция 5Java весна 2014 лекция 5
Java весна 2014 лекция 5Technopark
 
C++ Базовый. Занятие 13.
C++ Базовый. Занятие 13.C++ Базовый. Занятие 13.
C++ Базовый. Занятие 13.Igor Shkulipa
 
C++ STL & Qt. Занятие 11.
C++ STL & Qt. Занятие 11.C++ STL & Qt. Занятие 11.
C++ STL & Qt. Занятие 11.Igor Shkulipa
 

What's hot (20)

Java осень 2014 занятие 3
Java осень 2014 занятие 3Java осень 2014 занятие 3
Java осень 2014 занятие 3
 
Сервлеты
СервлетыСервлеты
Сервлеты
 
C++ STL & Qt. Занятие 05.
C++ STL & Qt. Занятие 05.C++ STL & Qt. Занятие 05.
C++ STL & Qt. Занятие 05.
 
Java осень 2014 занятие 6
Java осень 2014 занятие 6Java осень 2014 занятие 6
Java осень 2014 занятие 6
 
Windows Azure and node js
Windows Azure and node jsWindows Azure and node js
Windows Azure and node js
 
Bytecode
BytecodeBytecode
Bytecode
 
Aleksey Mashanov Rit
Aleksey  Mashanov RitAleksey  Mashanov Rit
Aleksey Mashanov Rit
 
Проектирование программных систем. Занятие 10
Проектирование программных систем. Занятие 10Проектирование программных систем. Занятие 10
Проектирование программных систем. Занятие 10
 
Объектно-ориентированное программирование. Лекция 5 и 6
Объектно-ориентированное программирование. Лекция 5 и 6Объектно-ориентированное программирование. Лекция 5 и 6
Объектно-ориентированное программирование. Лекция 5 и 6
 
Библиотеки для передачи данных (Lecture 13 – multithreading, network (libs))
Библиотеки для передачи данных (Lecture 13 – multithreading, network (libs))Библиотеки для передачи данных (Lecture 13 – multithreading, network (libs))
Библиотеки для передачи данных (Lecture 13 – multithreading, network (libs))
 
Многопоточность, работа с сетью (Lecture 12 – multithreading, network)
Многопоточность, работа с сетью (Lecture 12 – multithreading, network)Многопоточность, работа с сетью (Lecture 12 – multithreading, network)
Многопоточность, работа с сетью (Lecture 12 – multithreading, network)
 
C++ STL & Qt. Занятие 02.
C++ STL & Qt. Занятие 02.C++ STL & Qt. Занятие 02.
C++ STL & Qt. Занятие 02.
 
Java Core. Lecture# 5. Concurrency.
Java Core. Lecture# 5. Concurrency.Java Core. Lecture# 5. Concurrency.
Java Core. Lecture# 5. Concurrency.
 
Java осень 2014 занятие 7
Java осень 2014 занятие 7Java осень 2014 занятие 7
Java осень 2014 занятие 7
 
9 free rtos
9 free rtos9 free rtos
9 free rtos
 
C++ STL & Qt. Занятие 03.
C++ STL & Qt. Занятие 03.C++ STL & Qt. Занятие 03.
C++ STL & Qt. Занятие 03.
 
Java весна 2014 лекция 5
Java весна 2014 лекция 5Java весна 2014 лекция 5
Java весна 2014 лекция 5
 
java
javajava
java
 
C++ Базовый. Занятие 13.
C++ Базовый. Занятие 13.C++ Базовый. Занятие 13.
C++ Базовый. Занятие 13.
 
C++ STL & Qt. Занятие 11.
C++ STL & Qt. Занятие 11.C++ STL & Qt. Занятие 11.
C++ STL & Qt. Занятие 11.
 

Similar to МАИ, Сети ЭВМ, Лекция №4

6 создание распределенных приложений по технологии remoting
6 создание распределенных приложений по технологии remoting6 создание распределенных приложений по технологии remoting
6 создание распределенных приложений по технологии remotingKewpaN
 
ASP.NET MVC 3 Anton Vidishchev
ASP.NET MVC 3 Anton VidishchevASP.NET MVC 3 Anton Vidishchev
ASP.NET MVC 3 Anton VidishchevAlex Tumanoff
 
HTML 5: будущее уже сегодня, Сергей Байдачный, Microsoft Ukraine
HTML 5: будущее уже сегодня, Сергей Байдачный, Microsoft UkraineHTML 5: будущее уже сегодня, Сергей Байдачный, Microsoft Ukraine
HTML 5: будущее уже сегодня, Сергей Байдачный, Microsoft UkraineVolha Banadyseva
 
Хмарні обчислення
Хмарні обчисленняХмарні обчислення
Хмарні обчисленняNikolay Zalub
 
IT talk Odessa. Device Hive
IT talk Odessa. Device HiveIT talk Odessa. Device Hive
IT talk Odessa. Device HiveMarina Peregud
 
Другая виртуализация
Другая виртуализацияДругая виртуализация
Другая виртуализацияYandex
 
ASP.NET, MVC, ASP.NET MVC
ASP.NET, MVC, ASP.NET MVCASP.NET, MVC, ASP.NET MVC
ASP.NET, MVC, ASP.NET MVCGetDev.NET
 
Олег Крут (DataArt) "Что такое интернет вещей и как с ним работать"
Олег Крут (DataArt) "Что такое интернет вещей и как с ним работать"Олег Крут (DataArt) "Что такое интернет вещей и как с ним работать"
Олег Крут (DataArt) "Что такое интернет вещей и как с ним работать"DataArt
 
Программируемость фабрики ACI. Объектная модель, REST API, ACI Python SDK
Программируемость фабрики ACI. Объектная модель, REST API, ACI Python SDKПрограммируемость фабрики ACI. Объектная модель, REST API, ACI Python SDK
Программируемость фабрики ACI. Объектная модель, REST API, ACI Python SDKCisco Russia
 
Протокол HTTP. Клиент-серверная модель взаимодействия. Servlet API
Протокол HTTP. Клиент-серверная модель взаимодействия. Servlet APIПротокол HTTP. Клиент-серверная модель взаимодействия. Servlet API
Протокол HTTP. Клиент-серверная модель взаимодействия. Servlet APIEkaterina Kuchinskaya
 
SETCON'18 - Vitali Fokin - Kubernetes 101
SETCON'18 - Vitali Fokin - Kubernetes 101SETCON'18 - Vitali Fokin - Kubernetes 101
SETCON'18 - Vitali Fokin - Kubernetes 101Nadzeya Pus
 
C# Web. Занятие 03.
C# Web. Занятие 03.C# Web. Занятие 03.
C# Web. Занятие 03.Igor Shkulipa
 
C# Desktop. Занятие 15.
C# Desktop. Занятие 15.C# Desktop. Занятие 15.
C# Desktop. Занятие 15.Igor Shkulipa
 
RAD на Java: как устроена CUBA Platform?
RAD на Java: как устроена  CUBA Platform?RAD на Java: как устроена  CUBA Platform?
RAD на Java: как устроена CUBA Platform?Aleksey Stukalov
 
[JAM 2.1] Cloud Computing (Dmitry Ivashnev)
[JAM 2.1] Cloud Computing (Dmitry Ivashnev)[JAM 2.1] Cloud Computing (Dmitry Ivashnev)
[JAM 2.1] Cloud Computing (Dmitry Ivashnev)jam_team
 
Модифицируемость программных систем
Модифицируемость программных системМодифицируемость программных систем
Модифицируемость программных системDima Dzuba
 
Приватный клауд на базе OpenStack
Приватный клауд на базе OpenStackПриватный клауд на базе OpenStack
Приватный клауд на базе OpenStackIlya Alekseyev
 
Middleware
MiddlewareMiddleware
Middlewaremegakott
 

Similar to МАИ, Сети ЭВМ, Лекция №4 (20)

6 создание распределенных приложений по технологии remoting
6 создание распределенных приложений по технологии remoting6 создание распределенных приложений по технологии remoting
6 создание распределенных приложений по технологии remoting
 
Dataline средства репликации
Dataline средства репликацииDataline средства репликации
Dataline средства репликации
 
ASP.NET MVC 3 Anton Vidishchev
ASP.NET MVC 3 Anton VidishchevASP.NET MVC 3 Anton Vidishchev
ASP.NET MVC 3 Anton Vidishchev
 
HTML 5
HTML 5HTML 5
HTML 5
 
HTML 5: будущее уже сегодня, Сергей Байдачный, Microsoft Ukraine
HTML 5: будущее уже сегодня, Сергей Байдачный, Microsoft UkraineHTML 5: будущее уже сегодня, Сергей Байдачный, Microsoft Ukraine
HTML 5: будущее уже сегодня, Сергей Байдачный, Microsoft Ukraine
 
Хмарні обчислення
Хмарні обчисленняХмарні обчислення
Хмарні обчислення
 
IT talk Odessa. Device Hive
IT talk Odessa. Device HiveIT talk Odessa. Device Hive
IT talk Odessa. Device Hive
 
Другая виртуализация
Другая виртуализацияДругая виртуализация
Другая виртуализация
 
ASP.NET, MVC, ASP.NET MVC
ASP.NET, MVC, ASP.NET MVCASP.NET, MVC, ASP.NET MVC
ASP.NET, MVC, ASP.NET MVC
 
Олег Крут (DataArt) "Что такое интернет вещей и как с ним работать"
Олег Крут (DataArt) "Что такое интернет вещей и как с ним работать"Олег Крут (DataArt) "Что такое интернет вещей и как с ним работать"
Олег Крут (DataArt) "Что такое интернет вещей и как с ним работать"
 
Программируемость фабрики ACI. Объектная модель, REST API, ACI Python SDK
Программируемость фабрики ACI. Объектная модель, REST API, ACI Python SDKПрограммируемость фабрики ACI. Объектная модель, REST API, ACI Python SDK
Программируемость фабрики ACI. Объектная модель, REST API, ACI Python SDK
 
Протокол HTTP. Клиент-серверная модель взаимодействия. Servlet API
Протокол HTTP. Клиент-серверная модель взаимодействия. Servlet APIПротокол HTTP. Клиент-серверная модель взаимодействия. Servlet API
Протокол HTTP. Клиент-серверная модель взаимодействия. Servlet API
 
SETCON'18 - Vitali Fokin - Kubernetes 101
SETCON'18 - Vitali Fokin - Kubernetes 101SETCON'18 - Vitali Fokin - Kubernetes 101
SETCON'18 - Vitali Fokin - Kubernetes 101
 
C# Web. Занятие 03.
C# Web. Занятие 03.C# Web. Занятие 03.
C# Web. Занятие 03.
 
C# Desktop. Занятие 15.
C# Desktop. Занятие 15.C# Desktop. Занятие 15.
C# Desktop. Занятие 15.
 
RAD на Java: как устроена CUBA Platform?
RAD на Java: как устроена  CUBA Platform?RAD на Java: как устроена  CUBA Platform?
RAD на Java: как устроена CUBA Platform?
 
[JAM 2.1] Cloud Computing (Dmitry Ivashnev)
[JAM 2.1] Cloud Computing (Dmitry Ivashnev)[JAM 2.1] Cloud Computing (Dmitry Ivashnev)
[JAM 2.1] Cloud Computing (Dmitry Ivashnev)
 
Модифицируемость программных систем
Модифицируемость программных системМодифицируемость программных систем
Модифицируемость программных систем
 
Приватный клауд на базе OpenStack
Приватный клауд на базе OpenStackПриватный клауд на базе OpenStack
Приватный клауд на базе OpenStack
 
Middleware
MiddlewareMiddleware
Middleware
 

More from Dima Dzuba

Объектно-ориентированное программирование. Лекции 13 и 14
Объектно-ориентированное программирование. Лекции 13 и 14Объектно-ориентированное программирование. Лекции 13 и 14
Объектно-ориентированное программирование. Лекции 13 и 14Dima Dzuba
 
Объектно-ориентированное программирование. Лекции 11 и 12
Объектно-ориентированное программирование. Лекции 11 и 12Объектно-ориентированное программирование. Лекции 11 и 12
Объектно-ориентированное программирование. Лекции 11 и 12Dima Dzuba
 
Объектно-ориентированное программирование. Лекции 9 и 10
Объектно-ориентированное программирование. Лекции 9 и 10Объектно-ориентированное программирование. Лекции 9 и 10
Объектно-ориентированное программирование. Лекции 9 и 10Dima Dzuba
 
Requirement modelling in software creation process
Requirement modelling in software creation processRequirement modelling in software creation process
Requirement modelling in software creation processDima Dzuba
 
Объектно-ориентированное программирование. Лекция 7 и 8.
Объектно-ориентированное программирование. Лекция 7 и 8. Объектно-ориентированное программирование. Лекция 7 и 8.
Объектно-ориентированное программирование. Лекция 7 и 8. Dima Dzuba
 
Производительность программных систем
Производительность программных системПроизводительность программных систем
Производительность программных системDima Dzuba
 
Проектирование Программных Систем. Лекция 01
Проектирование Программных Систем. Лекция 01Проектирование Программных Систем. Лекция 01
Проектирование Программных Систем. Лекция 01Dima Dzuba
 
МАИ, Сети ЭВМ, Лекция №6
МАИ, Сети ЭВМ, Лекция №6МАИ, Сети ЭВМ, Лекция №6
МАИ, Сети ЭВМ, Лекция №6Dima Dzuba
 
МАИ, Сети ЭВМ, Лекция №3
МАИ, Сети ЭВМ, Лекция №3МАИ, Сети ЭВМ, Лекция №3
МАИ, Сети ЭВМ, Лекция №3Dima Dzuba
 
МАИ, Сети ЭВМ, Лекция №2
МАИ, Сети ЭВМ, Лекция №2МАИ, Сети ЭВМ, Лекция №2
МАИ, Сети ЭВМ, Лекция №2Dima Dzuba
 
МАИ, Сети ЭВМ, Лекция №1
МАИ, Сети ЭВМ, Лекция №1МАИ, Сети ЭВМ, Лекция №1
МАИ, Сети ЭВМ, Лекция №1Dima Dzuba
 
Решение конфликтов в процессе проектирования сложных систем
Решение конфликтов в процессе проектирования сложных системРешение конфликтов в процессе проектирования сложных систем
Решение конфликтов в процессе проектирования сложных системDima Dzuba
 
Объектно-Ориентированное Программирование на C++, Лекции 3 и 4
Объектно-Ориентированное Программирование на C++, Лекции  3 и 4 Объектно-Ориентированное Программирование на C++, Лекции  3 и 4
Объектно-Ориентированное Программирование на C++, Лекции 3 и 4 Dima Dzuba
 
Объектно-Ориентированное Программирование на C++, Лекции 1 и 2
Объектно-Ориентированное Программирование на C++, Лекции 1 и 2Объектно-Ориентированное Программирование на C++, Лекции 1 и 2
Объектно-Ориентированное Программирование на C++, Лекции 1 и 2Dima Dzuba
 
Arch intro4sts
Arch intro4stsArch intro4sts
Arch intro4stsDima Dzuba
 
Проектирование программных систем. Занятие 9
Проектирование программных систем. Занятие 9Проектирование программных систем. Занятие 9
Проектирование программных систем. Занятие 9Dima Dzuba
 
Проектирование программных систем. Занятие 8
Проектирование программных систем. Занятие 8Проектирование программных систем. Занятие 8
Проектирование программных систем. Занятие 8Dima Dzuba
 
Проектирование программных систем. Занятие 7
Проектирование программных систем. Занятие 7Проектирование программных систем. Занятие 7
Проектирование программных систем. Занятие 7Dima Dzuba
 
Проектирование программных систем. Занятие 6
Проектирование программных систем. Занятие 6Проектирование программных систем. Занятие 6
Проектирование программных систем. Занятие 6Dima Dzuba
 
Проектирование программных систем. Занятие 5
Проектирование программных систем. Занятие 5Проектирование программных систем. Занятие 5
Проектирование программных систем. Занятие 5Dima Dzuba
 

More from Dima Dzuba (20)

Объектно-ориентированное программирование. Лекции 13 и 14
Объектно-ориентированное программирование. Лекции 13 и 14Объектно-ориентированное программирование. Лекции 13 и 14
Объектно-ориентированное программирование. Лекции 13 и 14
 
Объектно-ориентированное программирование. Лекции 11 и 12
Объектно-ориентированное программирование. Лекции 11 и 12Объектно-ориентированное программирование. Лекции 11 и 12
Объектно-ориентированное программирование. Лекции 11 и 12
 
Объектно-ориентированное программирование. Лекции 9 и 10
Объектно-ориентированное программирование. Лекции 9 и 10Объектно-ориентированное программирование. Лекции 9 и 10
Объектно-ориентированное программирование. Лекции 9 и 10
 
Requirement modelling in software creation process
Requirement modelling in software creation processRequirement modelling in software creation process
Requirement modelling in software creation process
 
Объектно-ориентированное программирование. Лекция 7 и 8.
Объектно-ориентированное программирование. Лекция 7 и 8. Объектно-ориентированное программирование. Лекция 7 и 8.
Объектно-ориентированное программирование. Лекция 7 и 8.
 
Производительность программных систем
Производительность программных системПроизводительность программных систем
Производительность программных систем
 
Проектирование Программных Систем. Лекция 01
Проектирование Программных Систем. Лекция 01Проектирование Программных Систем. Лекция 01
Проектирование Программных Систем. Лекция 01
 
МАИ, Сети ЭВМ, Лекция №6
МАИ, Сети ЭВМ, Лекция №6МАИ, Сети ЭВМ, Лекция №6
МАИ, Сети ЭВМ, Лекция №6
 
МАИ, Сети ЭВМ, Лекция №3
МАИ, Сети ЭВМ, Лекция №3МАИ, Сети ЭВМ, Лекция №3
МАИ, Сети ЭВМ, Лекция №3
 
МАИ, Сети ЭВМ, Лекция №2
МАИ, Сети ЭВМ, Лекция №2МАИ, Сети ЭВМ, Лекция №2
МАИ, Сети ЭВМ, Лекция №2
 
МАИ, Сети ЭВМ, Лекция №1
МАИ, Сети ЭВМ, Лекция №1МАИ, Сети ЭВМ, Лекция №1
МАИ, Сети ЭВМ, Лекция №1
 
Решение конфликтов в процессе проектирования сложных систем
Решение конфликтов в процессе проектирования сложных системРешение конфликтов в процессе проектирования сложных систем
Решение конфликтов в процессе проектирования сложных систем
 
Объектно-Ориентированное Программирование на C++, Лекции 3 и 4
Объектно-Ориентированное Программирование на C++, Лекции  3 и 4 Объектно-Ориентированное Программирование на C++, Лекции  3 и 4
Объектно-Ориентированное Программирование на C++, Лекции 3 и 4
 
Объектно-Ориентированное Программирование на C++, Лекции 1 и 2
Объектно-Ориентированное Программирование на C++, Лекции 1 и 2Объектно-Ориентированное Программирование на C++, Лекции 1 и 2
Объектно-Ориентированное Программирование на C++, Лекции 1 и 2
 
Arch intro4sts
Arch intro4stsArch intro4sts
Arch intro4sts
 
Проектирование программных систем. Занятие 9
Проектирование программных систем. Занятие 9Проектирование программных систем. Занятие 9
Проектирование программных систем. Занятие 9
 
Проектирование программных систем. Занятие 8
Проектирование программных систем. Занятие 8Проектирование программных систем. Занятие 8
Проектирование программных систем. Занятие 8
 
Проектирование программных систем. Занятие 7
Проектирование программных систем. Занятие 7Проектирование программных систем. Занятие 7
Проектирование программных систем. Занятие 7
 
Проектирование программных систем. Занятие 6
Проектирование программных систем. Занятие 6Проектирование программных систем. Занятие 6
Проектирование программных систем. Занятие 6
 
Проектирование программных систем. Занятие 5
Проектирование программных систем. Занятие 5Проектирование программных систем. Занятие 5
Проектирование программных систем. Занятие 5
 

МАИ, Сети ЭВМ, Лекция №4

  • 1. МАИ, каф 806, Сети ЭВМ Технология взаимодействия.NET REMOTING 1
  • 2. МАИ, каф 806, Сети ЭВМ 2 .NET Remoting Средство взаимодействие .NET приложений; Позволяет реализовывать распределенные приложения «не задумываясь» о реализации алгоритмов сетевого обмена; Имеет архитектуру клиент-сервер; Может работать поверх разных протоколов (channel). Сейчас существует поддержка TCP и HTTP.  TCP -большая скорость;  HTTP -позволяет обойти firewall (работает поверх SOAP); Дает возможность пересечение границ доменов  .NET Remotingпозволяет объектам, исполняющимся внутри разных доменов приложений и контекстов, взаимодействовать друг с другом через границы .NET Remoting.  С точки зрения инфраструктуры .NET Remotingобъекты разделяются на две категории: дистанцируемые(remotable) и недистанцируемые(nonremotable).
  • 3. МАИ, каф 806, Сети ЭВМ Домены и границы Домены приложенийДомен приложения можно рассматривать как логический процесс. Мы говорим так потому, что один процесс Win32 способен содержать более одного домена приложений. Код и объекты, исполняющиеся в одном домене приложения, не имеют непосредственного доступа к коду и объектам, исполняющимся в другом домене приложения. Это обеспечивает защиту, так как сбой в одном домене приложения не влияет на другие домены приложения в том же процессе. Разделение между доменами приложения формирует границу .NET Remoting. 3
  • 4. МАИ, каф 806, Сети ЭВМ Типы данных Недистанцируемые типыНе всякий тип —дистанцируемый. Экземпляры недистанцируемых типов не могут пересекать границы .NET Remoting ни при каких условиях. При попытке передать экземпляр недистанцируемого типа другому домену приложения или контексту, инфраструктура .NET Remoting сгенерирует исключение. Более того, экземплярам объектов, расположенных вне домена приложения или контекста, содержащего экземпляр объекта недистанцируемого типа, не удастся получить непосредственный доступ к этому экземпляру. Дистанцируемые типыРазные категории дистанцируемых типов либо проникают сквозь границы .NET Remoting, либо доступны через эти границы. .NET Remoting определяет две категории дистанцируемых типов: передаваемые по значению (marshal-by-value), передаваемые по ссылке (marshal-by- reference) . 4
  • 5. МАИ, каф 806, Сети ЭВМ 5 .NET Remoting Клиент вызывает Proxy на клиентской стороне. Proxy обращается к транспортному уровню в соответствии с выбранным каналом. Данные передаются на сервер. В зависимости от того как создан сервер Singlecall или Singleton создается новый серверный объект или вызывается существующий. Результат вызова передается на транспортный уровень. Данные передаются на клиент. В соответствии с выбранным каналом данные распаковываются. Proxy возвращает ответ клиенту.
  • 6. МАИ, каф 806, Сети ЭВМ Передача по значению Экземпляры типов, передаваемых по значению, пересекают границы .NET Remotingс помощью процесса, известного под названием сериализация. Сериализация—это процесс представления текущего состояния обьектав виде последовательности бит. После того как обьектсериализован, инфраструктура .NET Remotingпересылает полученную последовательность бит через границы .NET Remotingв другой домен приложения или контекст, где инфраструктура выполняет их десериализациюв экземпляр типа, содержащий точную копию первоначального состояния. В .NET тип считается сериализуемым, если он объявлен с атрибутом Serializable. В следующем фрагменте кода данный атрибут используется для объявления класса сериализуемым: [Serializable] classSomeSerializableClass 6
  • 7. МАИ, каф 806, Сети ЭВМ Передача по ссылке[1/3] В некоторых случаях передача по значению —это то, что надо. Но иногда необходимо, чтобы все вызовы объекта, созданного в некотором домене приложения, обращались именно к экземпляру в данном домене, а не к его копии в другом домене. Например, объекту могут требоваться ресурсы, доступные только объектам, исполняющимся на данном компьютере. В этих случаях используются типы, передаваемые по ссылке, для которых инфраструктура ,NET Remoting передает ссылку на экземпляр объекта, а не его сериализооанную копию. .NET Framework требует, чтобы типы, передаваемые по ссылке, наследовали от System.MarshatByRefObject. Простое наследование от этого класса обеспечивает возможность удаленного доступа к экземплярам производного типа. Ниже показан фрагмент объявления типа, передаваемого по ссылке: classSomeMBRType : MarshalByRefQbject 7
  • 8. МАИ, каф 806, Сети ЭВМ Передача по ссылке[2/3] 8 приложение №1 приложение №2 алгоритм №1 объект №1 заглушка объекта №1 по сети
  • 9. МАИ, каф 806, Сети ЭВМ Передача по ссылке[3/3] В этих случаях инфраструктура .NET Remoting задействует средства, предоставляемые типом System.Runtime.Remoting.ObjRef Маршалинг —это процесс передачи ссылки на объект из одного подразделения .NET Remoting в другое. Для маршалинга ссылкина объект, передаваемый по ссылке из одного подразделения вдругое, инфраструктура .NET Remoting выполняет следующиедействия:  создает экземпляр ObRef, который полностью описывает предаваемый по ссылке объект;  сериализует ObjRef в виде потока бит;  пересылает сериализованный ObjRef в целевое подразделе-ние .NET Remoting. При получении сериализованного ObjRef инфраструктура .NETRemoting на принимающей стороне выполняет следующие действия:  десериализует ObjRef и создает экземпляр класса ObjRef;  по информации из ObjRef создает объект-прокси и, посредствомкоторого клиент может обращаться к удаленному объекту. 9
  • 10. МАИ, каф 806, Сети ЭВМ 10 .NET Remoting Выбор приложения-хоста для сервера, которое будет прослушивать выбранный channel.  Service  Console  Win Forms Выбор различных моделей активации:  SingleCall -объект не хранит состояния и может обработать только один вызов от клиента.  Singleton -к одному объекту могут обращаться различные клиенты.  Клиентская активация Способы конфигурации сервера:  Конфигурация из кода.  Конфигурация из конфигурационного файла. Способ представления клиенту информации об интерфейсе.  Интерфейсная DLL  Для HTTP каналов использование soapsuds.exe утилиты Visual Studio для генерации прокси. •Пример вызова: SOAPSUDS -url:http://localhost/Trader/StockQuote.soap?wsdl -oa:StockQuote.dll
  • 11. МАИ, каф 806, Сети ЭВМ Серверная активация RemotingConfiguration.RegisterWellKnownServiceType В терминах инфраструктуры .NET Remoting типы, активизируемые сервером, называются общеизвестными (well-known) типами, так как прежде чем активизировать экземпляры объекта серверное приложение публикует такой тип при помощи общеизвестного URI (Uniform Resource Identifier). Серверный процесс, в котором находится дистанцируемый тип, отвечает за конфигурирование данного типа как общеизвестного, публикуя его по определенным общеизвестным конечным точкам или адресам и активизируя экземпляры типа только при необходимости. .NET Remoting поддерживает два режима серверной активизации: 11 КлиентСерверКлиентСерверКлиентСерверКлиентСерверКлиентКлиентSingle CallSingleton
  • 12. МАИ, каф 806, Сети ЭВМ Режим Singleton В отдельный момент времени может быть активен не более чем один экземпляр типа, сконфигурированного в режиме Singleton. Единственный экземпляр активизируется при первом обращении к нему клиента в отсутствие другого экземпляра. Пока этот экземпляр активен, он обрабатывает все последующие запросы, как от того же клиента, так и от других. Экземпляр типа Singletonспособен сохранять состояние в промежутке между вызовами его методов. Ниже показан пример программного конфигурирования объектного типа в режиме Singletonв серверном приложении, которое реализует этот дистанцируемыйобъектный тип: RemotingConfiguration. RegisterWellKnownServiceType(typeof( SomeMBRType), "SomeURI", WellKnownObjectMode,Singleton); Клиент так же должен сконфигурировать SomeMBRTypeкак общеизвестный объект в режиме Singleton, это показано ниже: RemotingConfiguration.RegisterWellKnownClientType(typeof(SomeMBRType),"http://SomeWellKnownURL/SomeURI" ); 12
  • 13. МАИ, каф 806, Сети ЭВМ Режим SingleCall Второй режим серверной активизации —SingleCall —обеспечивает поддержку модели программирования без сохранения состояния. Для типа, сконфигурированного как SingleCall, инфраструктура .NET Remoting будет активизировать новый экземпляр при каждом вызове клиентом метода этого типа. После того как вызов метода обработан, инфраструктура .NET Remoting делает экземпляр типа доступным сборщику мусора. Следующий фрагмент кода демонстрирует программный способ конфигурирования дистанцируемого объектного типа в режиме SingleCall в приложении, которое реализует этот дистанцируемыйобъектный тип: RemotingConfiguration.RegisterWellKnownServiceType(typeof( SomeMBRType ), "SomeURI", WellKnownObjectMode.SingleCall ); 13
  • 14. МАИ, каф 806, Сети ЭВМ Клиентская активизация В некоторых случаях необходимо, чтобы каждый клиент работал с отдельным экземпляром удаленного объекта. Для этой цели .NET Rernoting предоставляет клиентскую активизацию. В отличие от общеизвестных типов с серверной активизацией, инфраструктура .NET Remoting назначает URI каждому экземпляру типа с клиентской активизацией. Экземпляры типов с клиентской активизацией могут оставаться активными в промежутках между вызовами методов и использовать ту же схему управления временем жизни, что и типыSingleton. Однако, вместо того чтобы обрабатывать все клиентские запросы с помощью единственного экземпляра типа, здесь ссылка каждого клиента отображается на отдельный экземпляр дистанцируемого типа. Ниже приведен пример программной конфигурации дистанцируемого объектного типа как активизируемого клиентом в приложении, которое реализует этот дистанцируемый объектный тип: RemotingConfiguration.RegisterActivatedServiceType(typeof( SomeMBRType )); Соответствующий конфигурационный код в клиентском приложении будет таким: RemotingConfiguration.RegisterActivatedClientType(typeof( SomeMBRType ),"http://SomeURL"); 14
  • 15. МАИ, каф 806, Сети ЭВМ 15 .NET Remoting. Алгоритм создания сервера Подключение System.Runtime.Remotingв Reference. Класс сервера должен быть наследником MarshalByRefObject Создаем интерфейс, который будет реализовывать серверный объект и помещаем его в отдельной dll. В приложении-хосте подключаем следующие namespace  System.Runtime.Remoting;  System.Runtime.Remoting.Channels;  System.Runtime.Remoting.Channels.Http; Пишем метод, который конфигурирует Remotingсервер: HttpChannelmyChannel= new HttpChannel(8080);//создаем серверный канал ChannelServices.RegisterChannel(myChannel,false); RemotingConfiguration.RegisterWellKnownServiceType(typeof(MyServiceClass) ,"MyServiceName.rem",WellKnownObjectMode.Singleton);
  • 16. МАИ, каф 806, Сети ЭВМ 16 .NET Remoting. Server Host. Пример 1.using System; 2.using System.Collections.Generic; 3.using System.ComponentModel; 4.using System.Data; 5.using System.Drawing; 6.using System.Text; 7.using System.Windows.Forms; 8.using System.Runtime.Remoting; 9.using System.Runtime.Remoting.Channels; 10.using System.Runtime.Remoting.Channels.Tcp; 11.namespaceLab2RemotingApp 12.{ 13.publicpartialclassForm1 : Form 14.{ 15.publicForm1() 16.{ 17.InitializeComponent(); 18.} 19. 20.privatevoidbutton1_Click(objectsender, EventArgs e) 21.{ 22.TcpChannel myChannel = new TcpChannel(25701); 23.ChannelServices.RegisterChannel(myChannel,false); RemotingConfiguration.RegisterWellKnownServiceType(typeof(Lab2RemotingService.HelloWorld), 24."HelloWorld.rem", 25.WellKnownObjectMode.SingleCall); 26. 27.} 28.} 29.}
  • 17. МАИ, каф 806, Сети ЭВМ 17 .NET Remoting. Клиент Подключение System.Runtime.Remotingв Reference. Подключаем сборку с интерфейсом в зависимые сборки; В приложении-хосте подключаем следующие namespace  System.Runtime.Remoting;  System.Runtime.Remoting.Channels;  System.Runtime.Remoting.Channels.Http; Пишем код, инициализирующий каналы:  HttpChannelmyChannel= new HttpChannel(); // создаем клиентский канал  ChannelServices.RegisterChannel(myChannel,false); Пишем код, осуществляющий вызов: IMyServiceClassobj= (IMyServiceClass)Activator.GetObject(typeof(IMyServiceClass),"http://localhost:8080/MyServiceName.rem",WellKnownObjectMode.Singleton);
  • 18. МАИ, каф 806, Сети ЭВМ 18 .NET Remoting. Клиент. Пример 1.using System; 2.using System.Collections.Generic; 3.using System.ComponentModel; 4.using System.Data; 5.using System.Drawing; 6.using System.Text; 7.using System.Windows.Forms; 8. 9.namespace Lab2Client 10.{ 11.public partial class Lab2Form : Form 12.{ 13.public Lab2Form() 14.{ 15.InitializeComponent(); 16.} 17. 18.private void button1_Click(object sender, EventArgs e) 19.{ 20.String szURL="tcp://localhost:25701/HelloWorld.rem"; 21.Lab2RemotingService.IHelloWorld objLab2Service = 22.(Lab2RemotingService.IHelloWorld) Activator.GetObject(typeof(Lab2RemotingService.IHelloWorld),szURL); 23. 24.this.richTextBox1.Text = objLab2Service.doHelloWorld(); 25.} 26.} 27.}
  • 19. МАИ, каф 806, Сети ЭВМ 19 .NET Remoting. Сервер Использование файла конфигурации App.Config 1.<system.runtime.remoting> 2.<application> 3.<channels> 4.<channel ref="tcp" port="25701"> 5.<serverProviders> 6.<formater ref=“binary”/> 7.</serverProviders> 8.</channel> 9.</channels> 10.<service> 11.<wellknown mode="SingleCall" 12.type="Lab2RemotingService.HelloWorld,Lab2RemotingService" 13.objectUri="HelloWorld.rem"/> 14.</service> 15.</application> 16.<customErrors mode="off"/> 17.</system.runtime.remoting> Пишем код для конфигурирования  RemotingConfiguration.Configure(AppDomain.CurrentDomain.SetupInformation.ConfigurationFile,false);
  • 20. МАИ, каф 806, Сети ЭВМ Реализация CallBack Для реализации Callback необходимо:  На клиенте реализовать объект –наследник MarchalByRefObject, который пердатьна сервер в качестве параметра.  Разрешить инфраструктуре .NET стерилизовать MBR объекты. Для этого нужно явно указать форматеру уровень фильтрации (на клиенте и сервере): BinaryServerFormatterSinkProviderprovider = new BinaryServerFormatterSinkProvider(); provider.TypeFilterLevel= TypeFilterLevel.Full;  Зарегистрировать на клиенте канал, для обратных вызовов: IDictionaryprops = new Hashtable(); props["port"] = 0; TcpChannelchan= new TcpChannel(props, null, provider); 20
  • 21. МАИ, каф 806, Сети ЭВМ 21 .NET Remoting. Правила использования Передача параметров вызова по значению или по ссылке? Размер передаваемых объектов?  Данные передаются в пакетном (а не в потоковом режиме), т.е. для отправки данных они вначале полностью загружаются в память. Все ли поля объектов надо передавать?  Для тех, которые не надо нужно использовать атрибут NonSerialized Как часто необходимо передавать объекты?  Нужно минимизировать число удаленных вызовов. Сколько клиентов Singleton объект может поддерживать?  Необходимо определить максимальное число клиентов, и использовать несколько серверов. Как долго серверный объект будет хранить состояние? Могут ли объекты с состояниями использоваться для повышения производительности? Будут ли использоваться фаирволы между сервером и клиентом.  Влияет на выбор канала HTTP/TCP. Будут ли осуществляться обратные вызовы со стороны клиента? Как будет производится замена версии сервера в случае если режим его работы 24 на 7?
  • 22. МАИ, каф 806, Сети ЭВМ 22 .NET Remoting. Асинхронный вызов 1.usingSystem; 2.usingSystem.Reflection; 3.usingSystem.Runtime.Remoting; 4.usingSystem.Runtime.Remoting.Channels; 5.usingSystem.Runtime.Remoting.Channels.Http; 6.usingSystem.Runtime.Remoting.Channels.Tcp; 7.usingSystem.Runtime.Remoting.Messaging; 8.usingRemotingInterface; 9.namespaceRemotingClient 10.{ 11.classClient 12.{ 13.delegateComplexObject RemoteAsyncDelegate(String stringParam, int intParam, double doubleParam, string[] arrayParam); 14.RemoteAsyncDelegate del = null; 15.[OneWay] 16.publicvoidOurCallBack(IAsyncResultres) 17.{ 18.Console.WriteLine("AsyncResult " + ((ComplexObject)del.EndInvoke(res)).stringParam); 19.} 20.publicvoidStart() 21.{ 22.Stringurl = "tcp://localhost:25701/MyServer.rem"; 23.IServer srv = (IServer)Activator.GetObject(typeof(IServer), url); 24.AsyncCallbackRemoteCallback = new AsyncCallback(this.OurCallBack); 25.del = new RemoteAsyncDelegate(srv.doSomething); 26.IAsyncResultRemAr = del.BeginInvoke("Hello world",1,1,new String[0],RemoteCallback,null); 27.RemAr.AsyncWaitHandle.WaitOne(); 28.Console.WriteLine("Done"); 29.} 30.} 31.}
  • 23. МАИ, каф 806, Сети ЭВМ Удаленный сборщик мусора! 23
  • 24. МАИ, каф 806, Сети ЭВМ Лицензия объекта Для управления временем жизни удаленных объектов .NET Remoting использует вариант распределенной сборки мусора на основе лицензий (lease). Чтобы понять причину выбора подобной схемы управления временем жизни, рассмотрим случай взаимодействия множества клиентов с удаленным объектом, активизируемым сервером в режиме Singleton. Схемы управления временем жизни, не использующие лицензии, могут применять для определения необходимости ликвидации такого объекта сочетание опроса клиентов и подсчета ссылок. Число ссылок соответствует числу подключенных клиентов, тогда как опрос гарантирует, что клиенты все еще функционируют. В подобной схеме сетевой трафик, связанный с опросом клиентов, иногда негативно сказывается на общей работе распределенного приложения. В противоположность этому система управления временем жизни на основе лицензий использует лицензии, спонсоров и диспетчер лицензий. Отсутствие в данной схеме опроса позволяет повысить общую производительность Лицензия —это объект, инкапсулирующий значения TimeSpan, используемые инфраструктурой .NET Remoting для управления временем жизни удаленного объекта. Для реализации этой функциональности инфраструктура .NET Remoting предоставляет интерфейс ILease. Когда CLR активизирует экземпляр общеизвестного объекта Singleton или удаленного объекта с клиентской активизацией, она запрашивает у объекта срок лицензии, вызывая его метод InitializeLHetimeSetvices, наследуемый от System.МаrshalByRet'Object. 24
  • 25. МАИ, каф 806, Сети ЭВМ 25 .NET Remoting. Лицензия объекта Необходимо переопределить метод InitializeLifetimeService Необходимо написать код для инициализации параметров жизненного цикла объекта: 1.usingSystem.Runtime.Remoting.Lifetime; 2.... 3.publicoverrideObjectInitializeLifetimeService() 4.{ 5.ILease lease=(ILease)base.InitializeLifetimeService(); 6.if(lease.CurrentState== LeaseState.Initial) 7.{ 8.lease.InitialLeaseTime = TimeSpan.FromSeconds(5);// время, после которого можно помещать в мусор, 0 -бесконечность; 9.lease.RenewOnCallTime = TimeSpan.FromSeconds(1);//время, на которое продляется жизнь при вызове; 10.lease.SponsorshipTimeout = TimeSpan.FromSeconds(5);//время ожидания ответа от спонсора на клиенте (для этого нужно на клиенте зарегистрировать серверный канал) 11.} 12.returnlease; 13.} 14...
  • 26. МАИ, каф 806, Сети ЭВМ Диспечер лицензий В каждом домене приложения имеется диспетчер лицензий, управляющий лицензиями экземпляров дистанцируемых объектов этого домена. При активизации удаленного объекта инфраструктура .NET Remoting передает его лицензию диспетчеру лицензий. Диспетчер периодически просматривает список лицензий, сравнивая время окончания действия лицензий с текущим временем. По умолча-нию диспетчер лицензий выполняет проверку окончания лицензий каждые 10 секунд, но периодичность опроса можно изменить (LifetimeServices.LeaseManagerPollTime=System.TimeSpan.FromMinutes(5);). Каждая лицензия, срок действия которой истек, уведомляется об этом диспетчером лицензий, после чего лицензия пытается продлить себя, опрашивая своих спонсоров. Если у лицензии нет спонсоров или никто из них не продлил ее, то лицензия отменяет себя, выполняя следующие действия:  устанавливает свое состояние в System.Runtime.Remoting.Lifetime.LeaseState.Expired;  уведомляет диспетчер лицензий о том, что ее следует удалитьиз таблицы лицензий;  отключает удаленный объект от инфраструктуры .NET Remoting;  отключает объект-лицензию от инфраструктуры .NET Remoting. 26
  • 27. МАИ, каф 806, Сети ЭВМ Спонсоры Спонсоры —это объекты, которые могутпродлить лицензии удаленных объектов. Для создания типа, способного выступать в качестве спонсора, необходимо реализоватьинтерфейс ISponsor. ClientSponsorв пространстве имен System.Runtime.Remoting.Lifetime, который вы вправе использовать в своих программах. Этоткласс является производным от System.MarshalByRefObject иреализует интерфейс ISponsor. //Использование класса ClientSponsor : предполагается, // что someMBR ссылается на экземпляр типа, // производного от MarshalByRefObject. // спонсор будет продлять время ссылки на 5 минут ClientSponsorcp = new ClientSponsor(TimeSpan.FromMinutes(5)); MyClassobj= new MyClass(); ILeaselease = (ILease)RemotingServices.GetLifetimeService(obj); lease.Register(cp); 27
  • 28. МАИ, каф 806, Сети ЭВМ Java.RMI ЛокальныйJava-объект Удаленный Java-объект Определение объекта Локальный объект определяется при помощи класса Java. Экспортируемое поведение удаленного объекта определяется при помощи интерфейса, который должен быть расширен из интерфейса Remote. Реализация объекта Локальный объект реализуется своим классом Java. Поведение удаленного объекта определяется классом Java, который реализует удаленный интерфейс. Создание объекта Новый экземпляр локального объекта создается оператором new. Новый экземпляр удаленного объекта создается на компьютере хоста оператором new. Клиент не может непосредственно создать новый удаленный объект (если не использует технологию Java 2 Remote Object Activation). Доступ к объекту Доступ к локальному объекту осуществляется непосредственно через переменную-ссылку на объект. Доступ к удаленному объекту осуществляется через переменную-ссылку на объект, указывающую на реализацию замещающей заглушки удаленного интерфейса. Активные ссылки В одной JVM, объект считается "живым", если существует хотя бы одна ссылка на него. В распределенной среде удаленная JVM может разрушиться, и сетевое соединение может быть потеряно. Считается, что удаленный объект имеет активную удаленную ссылку на него, если к нему производился доступ в течение определенного периода времени (срока аренды). Если все удаленные ссылки были удалены явно, или если у всех удаленных ссылок закончился срок аренды, тогда удаленный объект становится доступен для удаленной сборки мусора. Сборка мусора При удалении всех локальных ссылок на объект, он становится кандидатом на удаление сборщиком мусора. Удаленный сборщик мусора работает совместно с локальным. Если нет удаленных ссылок и удалены все локальные ссылки на объект, он становится кандидатом для сборщика мусора в обычном значении этого понятия. 28
  • 29. МАИ, каф 806, Сети ЭВМ 29 RMI.Java. Порядок создания распределенного приложения Сервер  Написание Удалённого интерфейса наследника java.rmi.Remote  Написание класса-сервера Реализующего удалённый интерфейс  Написание кода отвечающего за регистрацию сервера в службе каталогов  Создание Скелетных компонент и Заместителя с помощью утилиты rmic.exeиз Sun JDK  Изменение переменной среды CLASSPATH (внести путь к классам сервера)  Запуск Сервера •Запуск брокера запросовrmiregistry.exeиз состава Sun JDK •Запуск сервера Клиент  Написание клиента использующего удалённый интерфейс.  Написание кода осуществляющего подключение к удалённому серверу  Запуск Клиента
  • 30. МАИ, каф 806, Сети ЭВМ Как клиент находит удаленную службу RMI? Клиенты находят удаленные службы, используя службу имен или каталогов. RMI может использовать много различных служб каталогов, включая Java Naming and Directory Interface (JNDI). RMI и сама включает в себя простую службу, называемую реестром RMI, rmiregistry. Реестр RMI работает на каждой машине, содержащей объекты удаленных служб и принимающей запросы на обслуживание, по умолчанию используя порт 1099. На хосте программа сервера создает удаленную службу, предварительно создавая локальный объект, реализующий эту службу. Затем она экспортирует этот объект в RMI. Как только объект экспортирован, RMI создает службу прослушивания, ожидающую соединения с клиентом и запроса службы. После экспорта, сервер регистрирует объект в реестре RMI, используя общедоступное имя. На стороне клиента к реестру RMI доступ обеспечивается через статический класс Naming. Он предоставляет метод lookup(), который клиент использует для запросов к реестру. Метод lookup() принимает URL, указывающий на имя хоста и имя требуемой службы. Метод возвращает удаленную ссылку на обслуживающий объект. URL принимает следующий вид: rmi://<host_name> [:<name_service_port>] /<service_name> где host_name -это имя, распознаваемое в локальной сети (LAN), или DNS-имя в сети Internet. Необходимо только указать name_service_port, если служба имен исполняется на порте, отличном от принимаемого по умолчанию 1099. 30
  • 31. МАИ, каф 806, Сети ЭВМ RMI Compiler rmic<options> <class names> where <options> includes: -keep Do not delete intermediate generated source files -keepgenerated (same as "-keep") -g Generate debugging info -depend Recompile out-of-date files recursively -nowarn Generate no warnings -verbose Output messages about what the compiler is doing -classpath <path> Specify where to find input source and class files -d <directory> Specify where to place generated class files -J<runtime flag> Pass argument to the java interpreter 31
  • 32. МАИ, каф 806, Сети ЭВМ 32 Java.Server.Пример интерфейса 1.import java.rmi.Remote; 2.import java.rmi.RemoteException; 3. 4.public interface ILab3Interface extends Remote 5.{ 6.public int[] doHelloWorld(int[] src) throws RemoteException; 7.}
  • 33. МАИ, каф 806, Сети ЭВМ 33 Java.Server.Пример 1.import java.rmi.Naming; 2.import java.rmi.RemoteException; 3.import java.rmi.RMISecurityManager; 4.import java.rmi.server.UnicastRemoteObject; 5. 6.public class Lab3Server extends UnicastRemoteObjectimplements ILab3Interface 7.{ 8.public Lab3Server() throws RemoteException{super();} 9.public static void main(String[] args) 10.{ 11.try { 12.Naming.rebind("Lab3Server", new Lab3Server()); 13.System.out.println("Server bound in registry"); 14.} catch (Exception e) {e.printStackTrace();} 15.} 16.public int[] doHelloWorld(int[] src) throws RemoteException 17.{ 18.int[] result = new int[src.length]; 19.for(int i=0;i<src.length;i++)result[i]=src[src.length-i-1]; 20.return result; 21.} 22.}
  • 34. МАИ, каф 806, Сети ЭВМ 34 Java.Client.Пример 1.import java.rmi.Naming; 2.import java.rmi.RemoteException; 3. 4.public class Lab3Client { 5.public static void main(String[] args) { 6. 7.try{ 8.ILab3Interface server = (ILab3Interface) Naming.lookup("rmi://localhost/Lab3Server"); 9. 10.int src[]=new int[] {1,2,3,4,5}; 11.int ret[] = server.doHelloWorld(src); 12.System.out.println("Result:"); 13.for(int i=0;i<ret.length;i++) System.out.println("["+i+"]="+ret[i]); 14. 15.}catch(Exception e) 16.{ 17.e.printStackTrace(); 18.} 19.} 20.}
  • 35. МАИ, каф 806, Сети ЭВМ Клиентские обратные вызовы RMI RMI работает одинаково хорошо между всеми компьютерами. Однако, расширение клиентом java.rmi.server.UnicastRemoteObjectможет быть не практичным. В этих случаях удаленный объект может подготовить себя для удаленного использования, вызвав статический метод java.rmi.server.RemoteStubUnicastRemoteObject.exportObject (Remote<remote_object>). Далее передаем клиентский объект в качестве параметра серверу. Сервер может вызывать клиентский объект. 35