Взаимодействие между процессами



Взаимодействие между процессами


Стандартный маршалинг

Маршалинг (marshaling) — это упаковка всех параметров и возвращаемых значений и передача их через границы процессов. СОМ поддерживает так называемый стандартный маршалинг, который надежно работает для большинства объектов, значительно снижая требования к программной реализации и делая процесс мар-шалинга полностью прозрачным.

Произвольный маршалинг

Стандартный маршалинг есть не что иное, как частный случай произвольного мар-шалинга (custom marshaling). Вы можете реализовать свой вариант маршалинга, если нужно, чтобы объект выполнял один набор действий при сетевом доступе и другой — при локальном, эффективно маскируя это различие от клиента. Такая архитектура позволяет проектировать интерфейсы клиент-объект, не заботясь о производительности сети — эти вопросы можно решить позднее, без изменения разработанной инфраструктуры приложения.

Связь с клиентом

До некоторого момента все вызовы серверных функций клиентом являются внутри-процессными, однако рано или поздно возникает необходимость выхода за границы процесса. Поскольку виртуальные таблицы позволяют агенту (например, СОМ) перехватывать вызов функции (и возврат), агент может при необходимости переадресовать их механизму удаленного вызова процедур (Remote Procedure Call, RPC) так, что ни клиент, ни сервер этого не заметят. Единственное различие заключается в производительности — у внутрипроцессных вызовов она заметно выше.

Внутрипроцессные компоненты

Внутрипроцессные компоненты обычно реализуется в виде библиотек динамической загрузки (DLL). Они выполняются в том же адресном пространстве, что и клиент. Это самый эффективный метод связи между клиентом и компонентом — чтобы воспользоваться возможностями компонента, клиенту достаточно вызвать функцию.

Внепроцессные компоненты

Если объект находится вне процесса, вызов сначала переадресуется объекту-представителю (proxy), который предоставляется моделью СОМ или самим объектом (если его автор этого пожелает). Представитель упаковывает параметры вызова (включая любые указатели на интерфейс) и генерирует соответствующий RPC-вызов (или иной механизм в случае самостоятельно реализованных представителей), адресованный другому процессу или компьютеру, где реализован объект.

Связь с сервером

На сервере все вызовы функций интерфейса объекта выполняются через указатель на этот интерфейс. Указатель имеет смысл только в контексте конкретного процесса, поэтому роль вызывающего может играть только код того же процесса. Если объект внутрипроцессный, вызывающим будет сам клиент, в противном же случае — объект-«заглушка» (stub), предоставляемый СОМ или самим объектом. Заглушка принимает вызов RPC (или другого механизма в случае самостоятельно реализованного представителя) от представителя процесса-клиента, распаковывает параметры и вызывает соответствующий интерфейс серверного объекта. Независимо от конкретного механизма, клиент и сервер всегда считают, что взаимодействуют непосредственно с кодом внутри процесса.

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

Удаленный вызов процедур (Remote Procedure Call, RPC) основан на спецификации RPC распределенной среды программирования (Distributed Computing Environment, DCE-RPC) и по этой причине не зависит от платформы. СОМ-компоненты могут вызывать друг друга в гетерогенной среде, включающей платформы Windows 95, Windows NT, Unix и Macintosh и другие, поддерживающие DCE-RPC.



Содержание раздела