Распределенная архитектура объектов

Распределенные объекты работают при наличии серверного процесса, «продают» или обнародовали, объект, с которым могут соединиться другие клиентские процессы. Как только соединение сделано, клиентский процесс вызывает один из методов продаваемого объекта, как будто объект существовал в клиентском процессе — синтаксис не изменяется. Какао и система времени выполнения Objective C обрабатывают необходимую передачу данных между процессами.

Рисунок 1 показывает многие объекты, вовлеченные в распределенную систему объектов и как сообщение передается от клиентского процесса до серверного процесса. Процесс идет следующим образом.

Рисунок 1  , Отправляющий сообщение в продаваемый объект
Sending a message to a vended object

Серверный процесс продает объект путем присоединения его к NSConnection объект, содержащий NSPort объект. Порт может быть зарегистрирован в NSPortNameServer объект предоставить легкий доступ клиентами, желающими использовать продаваемый объект. Продаваемый объект может быть или реальным объектом, реализующим предоставленные методы или NSProtocolChecker проксируйте объект, фильтрующий методы на основе протокола перед передающими методами к реальному объекту.

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

Когда клиентский процесс отправляет сообщение в NSDistantObject объект, прокси получает сообщение Objective C в форме NSInvocation объект и вперед это к NSConnection объект. NSConnection объект кодирует NSInvocation в NSPortMessage объект, с помощью NSPortCoder объект и передачи это к NSPort объект соединился с NSPort объект в серверном процессе. Порт клиента отправляет закодированные данные в порт сервера, декодирующий данные назад в NSPortMessage объект. Сообщение порта тогда отправляется в NSConnection объект, преобразовывающий его в NSInvocation объект, с помощью NSPortCoder объект. Вызов наконец диспетчеризируется как сообщение Objective C, отправленное в продаваемый объект. Любое возвращаемое значение от объекта пасуется назад через соединение и возвращается прозрачно к клиентскому процессу.

Если продаваемый объект является экземпляром NSProtocolChecker, это тестирует, если сообщение Objective C, которое это получило, соответствует определенному протоколу, реализованному реальным объектом. Если сообщение находится в протоколе, средство проверки протокола передает сообщение к реальному объекту. Иначе, исключение повышено и возвращено к клиентскому процессу.

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