Соединения и прокси
В этом разделе описываются компоненты высшего уровня распределенной системы объектов: объект, управляющий коммуникацией (NSConnection
) и два объекта прокси, помогающие для продаваемого объекта (NSDistantObject
и NSProtocolChecker
).
NSConnection
NSConnection
объекты управляют коммуникацией между объектами в различных потоках или задачах на единственном узле или по сети. Они формируют магистраль распределенного механизма объектов, и обычно работают в фоновом режиме. Вы используете NSConnection
API явно при предоставлении доступа к объекту доступным для других приложений, при доступе к такому продаваемому объекту, и при изменении параметров связи по умолчанию; остальная часть времени Вы просто взаимодействуете с самими распределенными объектами.
NSConnection
объекты работают в парах, один в каждом приложении передачи или потоке. Серверное приложение имеет NSConnection
объект для каждого клиентского приложения соединился с ним, как показано на рисунке 1 (маркированное соединение s
используется для формирования новых соединений, как описано в Продаже Объекта и Получении Продаваемого Объекта). Круги представляют NSConnection
объекты и метки указывают само приложение и приложение, с которым оно подключено. Например, в s/a
s
стенды для сервера и a
стенды для клиента А. Если ссылка формируется между клиентами А и Б в этом примере, двух новых NSConnection
объекты создаются: a/b
и b/a
.
При нормальных обстоятельствах все распределенные объекты, переданные между приложениями, связываются через одну пару NSConnection
объекты. NSConnection
объекты не могут быть совместно использованы отдельными потоками, тем не менее, так для многопоточных отдельных приложений a NSConnection
объект должен быть создан для каждого потока. Это показано на рисунке 2.
Наконец, приложение может использовать распределенные объекты между своими собственными потоками для создания передающих сообщений ориентированными на многопотоковое исполнение. Это полезно для координирования работы с Набором Приложения, например. Рисунок 3 показывает как NSConnection
объекты соединяются. (Обратите внимание на то, что каждый поток имеет свое собственное значение по умолчанию NSConnection
объект, с которым это может продать отдельный объект.) Посмотрите Связь С Распределенными Объектами для большего количества подробных данных.
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
.
Объект должен быть тщателен относительно продажи ссылок на сам — средство проверки протокола преобразовывает возвращаемое значение сам для указания средства проверки, а не объекта для любых сообщений, переданных средством проверки, но прямые ссылки к объекту (обход средства проверки) могли быть розданы другими объектами.