Заглушки в распределенных вычислениях представляют собой фрагмент кода , который преобразует параметры передаются между клиентом и сервером во время удаленного вызова процедуры ( RPC ).
Основная идея RPC - позволить локальному компьютеру ( клиенту ) удаленно вызывать процедуры на другом компьютере ( сервере ). Клиент и сервер используют разные адресные пространства , поэтому параметры, используемые в вызове функции (процедуры), должны быть преобразованы, иначе значения этих параметров не могут быть использованы, потому что указатели на параметры в памяти одного компьютера будут указывать на разные данные в другой компьютер. Клиент и сервер могут также использовать разные представления данных, даже для простых параметров (например, обратный порядок байтов по сравнению с прямым порядком байтов.для целых чисел). Заглушки выполняют преобразование параметров, поэтому вызов удаленной процедуры выглядит как вызов локальной функции для удаленного компьютера.
Библиотеки-заглушки должны быть установлены как на стороне клиента, так и на стороне сервера. Клиентская заглушка отвечает за преобразование (маршалинг) параметров, используемых при вызове функции, и деконверсию результатов, переданных с сервера после выполнения функции. Каркас сервера , заглушка на стороне сервера, отвечает за деконверсию параметров, переданных клиентом, и преобразование результатов после выполнения функции.
Заготовки можно создать одним из двух способов:
- Вручную : в этом методе разработчик RPC предоставляет набор функций перевода, из которых пользователь может создавать свои собственные заглушки. Этот метод прост в реализации и может обрабатывать очень сложные типы параметров.
- Автоматически : это наиболее часто используемый метод создания заглушек. Он использует язык описания интерфейса (IDL) для определения интерфейса между клиентом и сервером. Например, определение интерфейса содержит информацию, указывающую, является ли каждый аргумент входным, выходным или обоими; только входные аргументы нужно копировать с клиента на сервер, и только выходные элементы нужно копировать с сервера на клиент.
Говорят, что серверная программа, реализующая процедуру в интерфейсе, экспортирует интерфейс, а клиентская программа, которая вызывает процедуры из интерфейса, называется импортом интерфейса. При написании распределенного приложения программист сначала пишет определение интерфейса, используя IDL, затем программисты могут написать клиентскую программу, которая импортирует интерфейс, и серверную программу, которая экспортирует интерфейс. Определение интерфейса обрабатывается с помощью компилятора IDL для создания компонентов, которые можно комбинировать с клиентскими и серверными программами, без внесения каких-либо изменений в существующие компиляторы. В частности, из интерфейса для каждой процедуры в интерфейсе компилятор генерирует соответствующие операции маршалинга и демаршалинга в каждой процедуре-заглушке и файл заголовка, который поддерживает типы данных в определении интерфейса. Заголовочный файл включается в исходные файлы как клиентской, так и серверной программы, клиентские процедуры-заглушки компилируются и связываются с клиентской программой, а процедуры-заглушки сервера компилируются и связываются с серверной программой. Компилятор IDL может быть разработан для обработки определений интерфейсов для использования с разными языками, что позволяет клиентам и серверам, написанным на разных языках, взаимодействовать с использованием удаленных вызовов процедур. Для достижения прозрачности семантики дизайнеры сделали RPC похожим на LPC, используя концепцию заглушек, которые скрывают фактическую реализацию RPC от программ интерфейса к базовой системе RPC.