ВУЗ:
Составители:
Рубрика:
108
Рис. 2.1. Осуществление вызовов удаленных процедур
При обращении клиента к удаленному серверу функциональности внутри адресного
пространства сервера создается так называемый серверный stub-объект (в терминологии
CORBA он называется skeleton, в терминологии COM – stub. Некоторые авторы переводят
этот термин как "заглушка". Этот объект является представителем данного клиента в
адресном пространстве сервера (при многопользовательском доступе к одному и тому же
экземпляру сервера этих объектов создается несколько).
Внутри адресного пространства клиента создается клиентский stub-объект (в
терминологии CORBA он называется stub, в терминологии COM – proxy. Иногда этот
термин переводят как "заместитель". Он может обладать таким же списком методов, как
соответствующий ему серверный stub-объект, но никогда не содержит их истинной
реализации. В лучшем случае вместо истинной реализации могут присутствовать функции
API из библиотеки, реализующей вызовы удаленных процедур и передачу данных с
помощью того или иного сетевого протокола. Так происходит в случае stub-кода,
сгенерированного утилитами из комплекта поставки Inprise Entera. Эти два stub-объекта
общаются между собой, обмениваясь данными примерно так же, как взаимодействуют
между собой сетевые приложения и сервисы. Данные, передаваемые передающим stub-
объектом, формируются в пакеты данных, которые с помощью сетевых протоколов
передаются принимающему stub-объекту (этот процесс иногда называется маршалингом
или маршрутизацией). Принимающий stub-объект расшифровывает пакеты данных.
При отсоединении клиента от сервера соответствующая пара stub-объектов
уничтожается. При этом в том случае, когда первый из подключившихся к серверу
клиентов инициировал сам или с помощью служебного сервера запуск сервера, при
отключении всех клиентов сервер, как правило, должен прекратить свою работу. Если же
сервер был запущен пользователем вручную, как правило, отсутствие подключенных
клиентов обычно не является основанием для прекращения его работы.
Многие инструменты для создания серверов функциональности содержат в
комплекте поставки утилиты для автоматической генерации stub-кода. Код генерируется
на основании описаний интерфейса сервера. Во многих случаях эти описания создаются
на языке IDL (Interface Definition Language).
Отметим, что существует несколько диалектов IDL (для COM, для CORBA и др.).
Тем не менее, различия между ними невелики. Delphi 4 поддерживает как COM IDL, так и
CORBA IDL.
Сервер приложений Inprise Entera содержит специальный кодогенератор для
большого количества языков программирования. Существует компилятор MIDL для
генерации stub-кода и proxy-кода на C++ на основе COM IDL. Он активно используется
при создании серверов и клиентов с помощью Microsoft Visual C++. В случае CORBA
также имеются кодогенераторы для С++ и Java. При создании серверов
функциональности, реализованных в виде серверов автоматизации, c помощью Delphi и
C++Builder, stub-код генерируется автоматически при создании соответствующих классов,
в этом случае создавать описания с помощью IDL нет необходимости. Однако в этом
случае всегда можно сгенерировать описание на IDL (как для COM, так и для CORBA) на
основании созданной библиотеки типов сервера. Фактически IDL - это стандарт,
Рис. 2.1. Осуществление вызовов удаленных процедур
При обращении клиента к удаленному серверу функциональности внутри адресного
пространства сервера создается так называемый серверный stub-объект (в терминологии
CORBA он называется skeleton, в терминологии COM – stub. Некоторые авторы переводят
этот термин как "заглушка". Этот объект является представителем данного клиента в
адресном пространстве сервера (при многопользовательском доступе к одному и тому же
экземпляру сервера этих объектов создается несколько).
Внутри адресного пространства клиента создается клиентский stub-объект (в
терминологии CORBA он называется stub, в терминологии COM – proxy. Иногда этот
термин переводят как "заместитель". Он может обладать таким же списком методов, как
соответствующий ему серверный stub-объект, но никогда не содержит их истинной
реализации. В лучшем случае вместо истинной реализации могут присутствовать функции
API из библиотеки, реализующей вызовы удаленных процедур и передачу данных с
помощью того или иного сетевого протокола. Так происходит в случае stub-кода,
сгенерированного утилитами из комплекта поставки Inprise Entera. Эти два stub-объекта
общаются между собой, обмениваясь данными примерно так же, как взаимодействуют
между собой сетевые приложения и сервисы. Данные, передаваемые передающим stub-
объектом, формируются в пакеты данных, которые с помощью сетевых протоколов
передаются принимающему stub-объекту (этот процесс иногда называется маршалингом
или маршрутизацией). Принимающий stub-объект расшифровывает пакеты данных.
При отсоединении клиента от сервера соответствующая пара stub-объектов
уничтожается. При этом в том случае, когда первый из подключившихся к серверу
клиентов инициировал сам или с помощью служебного сервера запуск сервера, при
отключении всех клиентов сервер, как правило, должен прекратить свою работу. Если же
сервер был запущен пользователем вручную, как правило, отсутствие подключенных
клиентов обычно не является основанием для прекращения его работы.
Многие инструменты для создания серверов функциональности содержат в
комплекте поставки утилиты для автоматической генерации stub-кода. Код генерируется
на основании описаний интерфейса сервера. Во многих случаях эти описания создаются
на языке IDL (Interface Definition Language).
Отметим, что существует несколько диалектов IDL (для COM, для CORBA и др.).
Тем не менее, различия между ними невелики. Delphi 4 поддерживает как COM IDL, так и
CORBA IDL.
Сервер приложений Inprise Entera содержит специальный кодогенератор для
большого количества языков программирования. Существует компилятор MIDL для
генерации stub-кода и proxy-кода на C++ на основе COM IDL. Он активно используется
при создании серверов и клиентов с помощью Microsoft Visual C++. В случае CORBA
также имеются кодогенераторы для С++ и Java. При создании серверов
функциональности, реализованных в виде серверов автоматизации, c помощью Delphi и
C++Builder, stub-код генерируется автоматически при создании соответствующих классов,
в этом случае создавать описания с помощью IDL нет необходимости. Однако в этом
случае всегда можно сгенерировать описание на IDL (как для COM, так и для CORBA) на
основании созданной библиотеки типов сервера. Фактически IDL - это стандарт,
108
Страницы
- « первая
- ‹ предыдущая
- …
- 106
- 107
- 108
- 109
- 110
- …
- следующая ›
- последняя »
