Добавил:
Upload Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
Т2. Связь_Таненбаум_СРС_ПРИС.doc
Скачиваний:
1
Добавлен:
01.03.2025
Размер:
1.59 Mб
Скачать

2.2. Удаленный вызов процедур 109

и ли к старой версией правильного сервера, сервер обнаружит ошибку и привяз­ки не произойдет.

Описания интерфейсов и уникальные идентификаторы в DCE в значитель­ной степени взаимозависимы. Как показано на рис. 2.14, первым шагом при на­писании приложения клиент-сервер является запуск программы Uuidgen, от ко­торой мы хотим создания прототипа файла IDL, содержащего идентификатор интерфейса, гарантированно не использовавшийся ни в одном интерфейсе, со­зданном при помощи программы Uuidgen. Уникальность обеспечивается путем кодирования идентификатора машины и времени создания. Идентификатор пред­ставляет собой 128-битное число, представляемое в файле IDL в шестнадцате-ричном формате в виде строки ASCII.

Следующим шагом является редактирование файла IDL, задание в нем имен удаленных процедур и их параметров. Несмотря на то что RPC не является пол­ностью прозрачной системой (например, клиент и сервер не могут совместно ис­пользовать глобальные переменные), правила IDL делают описание неподдер­живаемых конструкций невозможным.

После того как файл IDL будет закончен, для его обработки вызывается ком­пилятор IDL. В результате работы компилятора мы получаем три файла:

♦ заголовочный файл (то есть interface.h, в терминологии С);

  • файл клиентской заглушки;

  • файл серверной заглушки.

Заголовочный файл содержит уникальный идентификатор, определения ти­пов, констант и описания функций. Он может быть включен (с помощью дирек­тивы # include) в код сервера и клиента. Клиентская заглушка клиента содержит те процедуры, которые будет непосредственно вызывать клиентская программа. Эти процедуры отвечают за подбор параметров и упаковку их в исходящие сооб­щения с последующими обращениями к системе для их отправки. Клиентская заглушка также занимается распаковкой ответов, приходящих от сервера, и пе­редачей значений, содержащихся в этих ответах, клиенту. Серверная заглушка содержит процедуры, вызываемые системой на машине сервера по приходе на нее сообщений. Они, в свою очередь, вызывают процедуры сервера, непосредст­венно выполняющие необходимую работу.

Следующим шагом программиста является написание кода клиента и сервера. После этого они оба, а также обе заглушки, компилируются. Полученные объ­ектные файлы клиента и клиентской заглушки компонуются с библиотеками времени выполнения, что дает в результате исполняемый файл клиента. Таким же точно образом из файлов сервера и серверной заглушки после компиляции и компоновки получается исполняемый файл сервера. Во время исполнения кли­ент и сервер будут запущены, и приложение начнет свою работу.

Привязка клиента к серверу

Чтобы позволить клиенту вызывать сервер, необходимо, чтобы сервер был заре­гистрирован и готов к приему входящих вызовов. Регистрация сервера дает кли-

110 Глава 2. Связь

енту возможность реально обнаружить сервер и выполнить привязку к нему. Об­наружение сервера происходит в два этапа.

  1. Обнаружение машины сервера.

  2. Обнаружение сервера (то есть нужный процесс) на этой машине.

Второй шаг немного непонятен. В общем случае для того, чтобы связаться с сервером, клиенту нужно знать конечную точку (endpoint) машины сервера, ко­торой он может посылать сообщения. Конечная точка (более известная под на­званием порт) используется операционной системой сервера для получения входящих сообщений от различных внешних процессов. В DCE на каждой из сер­верных машин процессом, известным под названием DCE-демон (DCE daemon), поддерживается таблица пар сервер — конечная точка. Перед тем как сервер ста­нет доступным для входящих запросов, он должен запросить у операционной системы конечную точку. Далее сервер регистрирует эту конечную точку у DCE-демона. DCE-демон записывает эту информацию (включая и протоколы, по ко­торым может осуществляться обмен информацией с сервером) в таблицу конеч­ных точек для последующего использования.

Сервер также регистрирует (с помощью службы каталогов) предоставленные серверной машине сетевой адрес и имя, под которым сервер будет доступен. За­тем происходит привязка клиента к серверу, как показано на рис. 2.15.

Как показано на рисунке, привязка выполняется в несколько этапов.

  1. Регистрация конечной точки.

  2. Регистрация службы.

  3. Поиск сервера службы каталогов.

  4. Запрос конечной точки.

  5. Выполнение вызова RPC.

Предположим, клиенту требуется привязка к серверу видеоинформации, ло­кально доступному под именем /local/multimedia/video/movies. Он передает это