Механизм работы RPC
RPC позволяет клиенту напрямую вызывать процедуры, находящиеся в программе на удаленном сервере. Клиент и сервер имеют различные адресные пространства; так, каждый имеет свою собственную память, в которой распределены данные, используемые процедурами. Следующий рисунок иллюстрирует архитектуру RPC:
Рис.2.3. Механизм работы RPC.
Как показано на рис.2.3, клиентское приложение вызывает локальную заглушку вместо кода, непосредственно реализующего необходимую процедуру. Заглушка компилируется и линкуется с клиентским приложением. Заглушка клиента выполняет следующие действия:
· Запрашивает необходимые параметры из адресного пространства клиента
· Переводит параметры в стандартную форму представления данных в сети (NDR - standard network data representation)
· Вызывает необходимые функции из библиотеки времени выполнения RPC для отсылки запроса с параметрами на сервер.
Заглушка сервера выполняет следующие шаги:
· Библиотека времени выполнения RPC принимает запрос и вызывает процедуру заглушки сервера
· Заглушка сервера принимает параметра из буфера и конвертирует их из формата NDR в формат, процедуры сервера.
· Заглушка вызывает необходимую процедуру на сервере.
Удаленная процедура выполняется, генерирует выходные параметры и возвращаемое значение. Когда процедура завершена, следующие шаги возвращают данные клиенту:
· Удаленная процедура возвращает данные заглушке сервера
· Заглушка сервера конвертирует возвращаемые параметры в формат NDR и возвращает их функции библиотеки времени выполнения RPC
· Библиотечные функции передают данные через сеть на клиентский компьютер
Клиент завершает процесс принятием данных из сети и их возвратом вызывающей функции:
· Клиентская библиотека времени выполнения RPC принимает значения, возвращаемые удаленной процедурой и возвращает их заглушке
· Заглушка клиента конвертирует данные из формата NDR в формат, используемый клиентским приложением
· Приложение клиента продолжает свою работу.
Для Microsoft Windows и Windows NT библиотеки времени выполнения используются двумя путями: как статическая библиотека, линкуемая в приложение; и библиотека, реализованная как DLL.
Серверное приложение содержит вызовы библиотеки времени выполнения сервера, которая регистрирует интерфейсы сервера и позволяет серверу принимать вызовы удаленных процедур. Серверное приложение также содержит специфичные для каждого приложения процедуры, которые вызываются с клиента.
Таким образом, реализовав коммуникационный сервис на базе слоя RPC, можно существенно сэкономить время на разработке протоколов обмена информацией, а также получить систему, работающую по любым транспортным протоколам.