Соединения и прокси

В этом разделе описываются компоненты высшего уровня распределенной системы объектов: объект, управляющий коммуникацией (NSConnection) и два объекта прокси, помогающие для продаваемого объекта (NSDistantObject и NSProtocolChecker).

NSConnection

NSConnection объекты управляют коммуникацией между объектами в различных потоках или задачах на единственном узле или по сети. Они формируют магистраль распределенного механизма объектов, и обычно работают в фоновом режиме. Вы используете NSConnection API явно при предоставлении доступа к объекту доступным для других приложений, при доступе к такому продаваемому объекту, и при изменении параметров связи по умолчанию; остальная часть времени Вы просто взаимодействуете с самими распределенными объектами.

NSConnection объекты работают в парах, один в каждом приложении передачи или потоке. Серверное приложение имеет NSConnection объект для каждого клиентского приложения соединился с ним, как показано на рисунке 1 (маркированное соединение s используется для формирования новых соединений, как описано в Продаже Объекта и Получении Продаваемого Объекта). Круги представляют NSConnection объекты и метки указывают само приложение и приложение, с которым оно подключено. Например, в s/a s стенды для сервера и a стенды для клиента А. Если ссылка формируется между клиентами А и Б в этом примере, двух новых NSConnection объекты создаются: a/b и b/a.

Рисунок 1  NSConnection возражает между сервером и двумя клиентскими процессами
NSConnections between a server and two client processes

При нормальных обстоятельствах все распределенные объекты, переданные между приложениями, связываются через одну пару NSConnection объекты. NSConnection объекты не могут быть совместно использованы отдельными потоками, тем не менее, так для многопоточных отдельных приложений a NSConnection объект должен быть создан для каждого потока. Это показано на рисунке 2.

Рисунок 2  NSConnection возражает между сервером и двумя клиентскими потоками
NSConnections between a server and two client threads

Наконец, приложение может использовать распределенные объекты между своими собственными потоками для создания передающих сообщений ориентированными на многопотоковое исполнение. Это полезно для координирования работы с Набором Приложения, например. Рисунок 3 показывает как NSConnection объекты соединяются. (Обратите внимание на то, что каждый поток имеет свое собственное значение по умолчанию NSConnection объект, с которым это может продать отдельный объект.) Посмотрите Связь С Распределенными Объектами для большего количества подробных данных.

Рисунок 3  NSConnection возражает между двумя потоками
NSConnections between two threads

NSProxy и подклассы

NSProxy абстрактный суперкласс, определяющий API для объектов, действующих как заместители для других объектов или для объектов, еще не существующих. Как правило, сообщение к прокси передается к реальному объекту или заставляет прокси загружать (или преобразовывать себя в) реальный объект. Подклассы NSProxy может использоваться для реализации прозрачного распределенного обмена сообщениями (например, NSDistantObject) или для ленивого инстанцирования объектов, которые являются дорогими для создания.

Существует два подкласса NSProxy определенный распределенной системой объектов. NSDistantObject представляет продаваемый объект в клиентской системе; это получает сообщения, переданные ему и вперед их использующий NSConnection возразите против серверного процесса. NSProtocolChecker объект может быть продан серверным процессом вместо реального объекта отфильтровать любые сообщения, не соответствующие определенному протоколу. Больше подробных данных каждого класса ниже.

NSDistantObject

NSDistantObject конкретный подкласс NSProxy это определяет прокси для объектов в других приложениях или потоках. Когда NSDistantObject объект получает сообщение, в большинстве случаев он передает сообщение через NSConnection возразите против реального объекта в другом приложении, предоставив возвращаемое значение к отправителю сообщения, если Вы являетесь предстоящими, и распространяющий какое-либо исключение назад к invoker метода, повысившего его.

NSDistantObject добавляют два полезных метода экземпляра для определенных NSProxy. connectionForProxy возвраты NSConnection возразите, что обрабатывает получатель. setProtocolForProxy: устанавливает набор методов, на которые реальный объект, как известно, отвечает, сохраняя сетевой трафик, требуемый определить параметр, и возврат вводит в первый раз, когда определенный селектор передается удаленному прокси. Установка протокола, тем не менее, не препятствует тому, чтобы были отправлены другие методы; они просто требуют, чтобы сетевой трафик получил сигнатуру метода. Для отфильтровывания методов не в протоколе используйте NSProtocolChecker экземпляр как продаваемый объект.

Существует два вида NSDistantObject: локальные прокси и удаленные прокси. Локальный прокси создается NSConnection возразите в первый раз, когда объект отправляется в другое приложение. Это используется NSConnection объект в бухгалтерских целях и нужно считать частным. Локальный прокси передается по сети с помощью NSCoding протокол для создания удаленного прокси, который является объектом, который использует другое приложение. NSDistantObject определяет методы для NSConnection объект создать экземпляры, но они предназначаются только для подклассов для переопределения — Вы никогда не должны вызывать их непосредственно. Использовать NSConnection rootProxyForConnectionWithRegisteredName:host: метод, устанавливающий все требуемое состояние для пары объектной прокси.

NSProtocolChecker

Когда объект продается, все его методы становятся доступными другим процессам. Это не может быть желаемо при продаже объекта со многими методами, только несколько из которых должны быть удаленно доступными. NSProtocolChecker класс (конкретный подкласс NSProxy) определяет объект, ограничивающий сообщения, которые могут быть отправлены в другой объект (называемые делегатом средства проверки).

Средство проверки протокола действует как своего рода прокси; когда это получает сообщение, которое находится в его указанном протоколе, это передает сообщение к его цели, и следовательно, кажется, сам целевой объект. Однако, когда это получает сообщение не в его протоколе, это повышает NSInvalidArgumentException указать, что сообщение не позволяется, реализует ли целевой объект метод.

Как правило, объект, который должен быть распределен (все же должен ограничить сообщения) создает NSProtocolChecker объект для себя и возвратов средство проверки вместо того, чтобы возвратить себя в ответ на любые сообщения. Объект мог бы также зарегистрировать средство проверки как корневой объект NSConnection.

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