CORBA на Mac OS X (Какао)

В настоящее время я изучаю различные способы поддержки объектов распределенной модели (то есть вычислительной модели, которая выполняется на нескольких разных компьютерах) в проекте, который изначально ориентирован на Mac OS X (с использованием Cocoa). Насколько я знаю, есть возможность использовать кластер классов вокруг NSProxy, Но, кажется, также есть реализации CORBA с поддержкой Objective-C.

Позднее может возникнуть необходимость поддержки / включения машин Windows. В этом случае мне нужно будет использовать что-то вроде Gnustep на стороне Windows (который может быть вариантом, если он работает хорошо) или придумать комбинацию обеих технологий. Или напишите что-нибудь вручную (что, конечно, наименее желательный вариант).

Мои вопросы:

  1. Если у вас есть опыт работы с обеими технологиями (нативная инфраструктура Какао против CORBA), можете ли вы указать на некоторые ключевые особенности / проблемы любого из этих подходов? (РЕДАКТИРОВАТЬ: Как я уже указывал в этой теме, удаленные методы пока недоступны для iPhone и iPad. С другой стороны, есть реализации CORBA, которые работают на любой платформе, например, " AdORB - CORBA ORB для Mac OS X". и iPhone OS ".)

  2. Можно ли использовать Gnustep с какао способом, описанным выше? [ РЕДАКТИРОВАТЬ: В соответствии с разделом часто задаваемых вопросов Gnustep 1.1.5 это невозможно, поэтому использование нативной инфраструктуры Cocoa ограничивает меня этой технологией.]

  3. Возможно ли (и разумно выполнимо, то есть проще, чем написание сетевого уровня вручную) обмениваться данными между всеми клиентами Mac OS, использующими технологию Cocoa, и с клиентами Windows через CORBA? [ РЕДАКТИРОВАТЬ: Из того, что я узнал сейчас, это возможно, но, конечно, не возможно. Сообщения должны пересылаться в обоих направлениях, т. Е. Нужен "прокси" для пересылки сообщений из одной системы в другую и наоборот. По сути, это эквивалентно написанию сетевого уровня вручную без практической выгоды от NSProxy кластер классов, ни CORBA.]

ОБНОВЛЕНИЕ: CORBA, кажется, действительно лучше подходит, когда гибкость и расширяемость являются проблемой. Недостатком является то, что кажется более сложным в освоении и использовании на начальном этапе, см. Эту ветку (ссылка предоставлена ​​Кристофером Джонсоном - спасибо!) Для различных точек зрения на практические аспекты. Веб-сервисы являются жизнеспособным вариантом, если шаблон связи достаточно прост, см. Этот раздел, чтобы найти варианты, которые хорошо работают на iOS. Я суммировал свои выводы в этой статье.

2 ответа

Решение

Самый простой способ реализовать распределенные объекты в Какао - это, например, Распределенные объекты (или в Mountain Lion, XPC). Это действительно очень простой способ получить RMI ( вот полный пример DO). Однако эти протоколы являются проприетарными и не могут использоваться с платформами не-Apple; в то время как GNUstep действительно использует DO, и я успешно использовал их реализацию в кроссплатформенных проектах, их протокол не совместим с Apple. Таким образом, вы должны использовать GNUstep в его gnu-gnu-gnu комбинировать библиотеку в Mac OS X вместо Cocoa (что я бы не рекомендовал) или выбрать другой подход.

CORBA - один из таких "разных подходов". Основные различия между CORBA и DO:

  • в CORBA вы определяете интерфейс обмена сообщениями, используя IDL, который используется для генерации ObjC. С DO вы используете Objective-C напрямую.
  • CORBA не поддерживает "типизацию утки"; он строго типизирован, поэтому каждый метод, который вы собираетесь использовать удаленно, должен быть указан в IDL. Это также означает, что любой метод, который вы используете, гарантированно будет реализован на другом конце (конечно, другой конец не гарантированно будет доступен в любой реализации RMI).
  • большая часть пользовательской базы CORBA не на ObjC (Java и C++ более распространены).
  • CORBA имеет более широкую поддержку платформ.
  • Реализации CORBA не обязательно должны быть в ObjC.

FWIW, я бы не использовал CORBA, если у вас нет существующей инфраструктуры на основе CORBA, с которой вам нужно взаимодействовать.

В свое время CORBA была в порядке, но это "умирающая" технология, и вам будет трудно получить необходимую поддержку в будущем. Существует также довольно крутая кривая обучения.

Я бы также держался подальше от вещей, связанных с Cocoa/Gnustep, если вы хотите что-то кроссплатформенное, поскольку оно действительно не очень хорошо поддерживается нигде, кроме OS X и iOS.

Вместо того, чтобы овладеть этими устаревшими технологиями, я думаю, что ваше время будет лучше потрачено на выяснение того, как использовать веб-службы, SOAP или другие основные технологии кросс-платформенной интеграции.

Другие вопросы по тегам