Рамочная рекомендация по разработке распределенных приложений для iPhone / iPad
Есть ли распределенная среда приложений (коммерческая тоже хорошо), которая поддерживает iPhone / iPad?
Что я ищу в рамках:
- Позволяет мне сосредоточиться на логике приложения
- Мне не нужно кодировать "низкоуровневое" сетевое программирование (я делал это слишком много раз, поэтому я не хочу делать это снова = p)
- Должен активно поддерживаться (популярно было бы неплохо)
По сути, я могу развиваться быстрее.
Мы планируем разработать мягкое приложение клиент / сервер TCP/IP в режиме реального времени, в котором будет множество клиентов iPhone / iPad (более 30), подключенных к одному серверу по локальной сети. Сервер, скорее всего, будет работать под управлением Windows (если среда не поддерживает его).
Я смотрю вокруг и вижу:
- MonoTouch WCF (все еще выглядит довольно сырым?)
- RemObjects (Mono + Objective-C)
- Распределенные объекты какао
- ZeroC Ice Touch (Objective-C)
- RakNet (включен, потому что упоминается iPhone, но нужно будет использовать C++)
- Конечно, есть также возможность использовать простой старый MonoTouch System.Net.Sockets
- Или CFNetwork (я не планирую использовать этот)
Я все еще решаю, использовать ли Objective-C или MonoTouch, но склоняюсь к MonoTouch, так как мы получим платформу.NET, а не будем привязаны только к миру Mac.
Пожалуйста, не стесняйтесь комментировать, если я добавил что-то, что не связано с моим вопросом - я новичок в мире iPhone / iPad.
4 ответа
Мы использовали WCF/Monotouch с большим успехом - есть некоторые области работы, которые не на 100%, но в большинстве случаев работа с WCF на monotouch не составит труда.
Возможность делиться всеми нашими данными, синхронизировать, моделировать, тестировать и т. Д. Между monodroid и monotouch и wm7 очень полезна (если вы работаете - это легко сделать - вам нужно управлять несколькими файлами prj).
Будьте осторожны, чтобы правильно управлять вызовами к сервисам wcf, сводите их к минимуму, сохраняйте простую архитектуру. В итоге мы получили довольно сложную функцию dto, чтобы минимизировать количество обращений к службам wcf для синхронизации данных - это того стоило, поскольку время, необходимое для синхронизации устройства с нуля, теперь составляет лишь часть того, что было.
Использование SSL для связи с сервером - это PITA, но я думаю, что это скорее пример того, как Apple справилась с этим.
Вы должны быть более четкими в своих требованиях. Если вам требуется только сериализация объектов (дегидратация / гидратация) через REST API, то все, что поддерживает POX или JSON, будет работать для вас просто отлично. Однако если вам нужен вызов метода в стиле RPC с аутентификацией, шифрованием / цифровой подписью, транзакциями и т. Д., То вам нужна одна из тех платформ, которые вы перечислили выше.
Если вам нужна платформа, я лично склоняюсь к MonoTouch WCF, так как она дает вам возможность перенести клиента и на другие платформы позже (например, Windows Phone 7). Опять же, как вы сказали, сейчас это немного сложно, и если команда Mono в будущем решит, что у нее нет ресурсов, чтобы инвестировать в ее поддержку, вам может понадобиться перейти на другую структуру. Конечно, есть и недостаток, что вам нужно использовать MonoTouch для вашего приложения, и вы не можете использовать Objective-C. Конечно, учитывая недавние изменения в соглашении для разработчиков iOS, это не такая уж большая проблема, но об этом все же следует помнить.
(Отказ от ответственности: я работал в команде Microsoft WCF, поэтому я склонен к самому продукту)
Другой вариант, который я бы выбрал, - это распределенные объекты какао. Тем не менее, это был бы мой выбор, если сервер также работает на OS X. Я знаю, что есть Bonjour для Windows, но я сомневаюсь, что он оптимизирован для серверных сценариев, и я также не знаю, насколько богата реализация RPC от Apple поверх него. для платформы Windows. Так что я бы остался с технологией Apple, только если бы я создавал исключительно для платформы Apple.
Обратите внимание, что WCF и Распределенные объекты предоставят вам функциональность в стиле RPC, но они не помогут вам в каких-либо конкретных сценариях. Если вам нужен / нужен еще более высокий уровень абстракции, например, вам нужна информация о присутствии или многопользовательский чат, вам все равно придется реализовать их самостоятельно. На этом этапе, возможно, стоит взглянуть на фреймворки, которые предоставляют эти функции для вас. Примером может служить RakNet (который вы перечислили выше), который абстрагирует уровень удаленного взаимодействия и создает поверх него дополнительные функции.
Вы можете использовать JSON Touch + Vitche PHP Emission Framework, который предоставляет всю необходимую вам серверную часть. Также вы можете использовать эту платформу для доступа к существующим сервисам SOAP (WCF, Axis и т. Д.).
Вы можете использовать буферы протокола Google для реализации RPC, хотя в любом случае вам понадобится некоторое сетевое программирование для транспортировки ваших сообщений. Он поддерживает генерацию интерфейса для C++, Java, Python и Objective-C и.NET, так что вы можете создавать единый набор сообщений RPC и получать код для работы с ними практически для любой мобильной платформы. Транспортный слой на ваших мобильных платформах вам придется реализовать самостоятельно.
http: // code.google.com/apis/protocolbuffers/ - главная страница Protobuf (C++, Java, Python) http:// code.google.com/p/protobuf-net/ - Protobuf .NET, упомянутый в одном из комментарии http:// code.google.com/p/metasyntactic/wiki/ProtocolBuffers - Protobuf для Obj-C