CORBA на Mac OS X (Какао)
В настоящее время я изучаю различные способы поддержки объектов распределенной модели (то есть вычислительной модели, которая выполняется на нескольких разных компьютерах) в проекте, который изначально ориентирован на Mac OS X (с использованием Cocoa). Насколько я знаю, есть возможность использовать кластер классов вокруг NSProxy
, Но, кажется, также есть реализации CORBA с поддержкой Objective-C.
Позднее может возникнуть необходимость поддержки / включения машин Windows. В этом случае мне нужно будет использовать что-то вроде Gnustep на стороне Windows (который может быть вариантом, если он работает хорошо) или придумать комбинацию обеих технологий. Или напишите что-нибудь вручную (что, конечно, наименее желательный вариант).
Мои вопросы:
Если у вас есть опыт работы с обеими технологиями (нативная инфраструктура Какао против CORBA), можете ли вы указать на некоторые ключевые особенности / проблемы любого из этих подходов? (РЕДАКТИРОВАТЬ: Как я уже указывал в этой теме, удаленные методы пока недоступны для iPhone и iPad. С другой стороны, есть реализации CORBA, которые работают на любой платформе, например, " AdORB - CORBA ORB для Mac OS X". и iPhone OS ".)
Можно ли использовать Gnustep с какао способом, описанным выше? [ РЕДАКТИРОВАТЬ: В соответствии с разделом часто задаваемых вопросов Gnustep 1.1.5 это невозможно, поэтому использование нативной инфраструктуры Cocoa ограничивает меня этой технологией.]
Возможно ли (и разумно выполнимо, то есть проще, чем написание сетевого уровня вручную) обмениваться данными между всеми клиентами 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 или другие основные технологии кросс-платформенной интеграции.