Клиент/серверное приложение Cocoa
-
03-07-2019 - |
Вопрос
Есть ли в Cocoa способ, который в настоящее время считается лучшей практикой для создания многоуровневого или клиент-серверного приложения?
Я опытный веб-разработчик и очень люблю Python.Хотя я новичок в Какао.Приложение, над написанием которого я работаю, представляет собой систему управления пациентами для крупной больницы.Ожидается, что система будет хранить огромные объемы данных с течением времени, но данные, передаваемые за один сеанс, очень легкие (в основном только текст).Предполагается, что связь осуществляется через локальную сеть (проводную или беспроводную).Конечно, это должно быть очень безопасно.
Лучшее, что я мог придумать, — это написать веб-службу REST на Python и подключиться к ней через приложение Cocoa.Возможно, я даже буду использовать Python для написания кода самого приложения Cocoa.
Глядя на Cocoa, я вижу действительно замечательные технологии в Cocoa, такие как CoreData, но я не смог найти ничего похожего для разработки клиент-серверов.Я просто хочу убедиться, что ничего не упускаю.
Что вы думаете?
Примеры из реальной жизни будут очень признательны.
Заранее спасибо.
Решение
Если у вас есть контроль как над клиентом, так и над сервером, и вы можете ограничить клиент только OS X, я поддерживаю ответ Марка.Распределенные объекты Cocoa — это потрясающая технология, которая упрощает создание клиент-серверных приложений в стиле RPC.
Если приведенные выше требования слишком строги для вас, у вас все еще есть много вариантов в мире какао:
Вы можете запрограммировать все клиентское приложение на Python, используя PyObjC.При таком подходе вы можете использовать стандартный сетевой код, знакомый вам по стандартной библиотеке Python. витой также прекрасно интегрируется с циклом выполнения Cocoa (примеры приведены в примере кода PyObjC), и я добился большого успеха, используя Twisted для сетевого взаимодействия в приложении Cocoa.Если вы решите пойти по этому пути, вы можете закодировать клиентское приложение в Objective-C и загрузить код Python в качестве плагина (используя NSBundle).PyObjC's
py2app
может компилировать загружаемые пакеты из кода Python.Вы можете использовать NSURLConnection для доступа высокого уровня к HTTP-серверу.
Снизив уровень абстракции, вы можете использовать NSStream от Cocoa для реализации своего сетевого протокола.Документация класса здесь, со ссылками на пример кода, демонстрирующий протоколы HTTP и SOAP.
Вы можете перейти на следующий уровень ниже и использовать классы CFNetwork.NSStream основан на CFNetwork, но вы можете контролировать линию на более низком уровне, используя CFNetwork.
Наконец, технология Apple для клиент-серверных архитектур — это Веб-объекты рамки.
Другие советы
Какао имеет Переносимые распределенные объекты, который позволяет вам создавать клиент-серверное приложение на чистом Objective-C и Cocoa, которое может взаимодействовать между процессами или через сеть.
К сожалению, это одна из самых сложных вещей для изучения в Какао.Распределенные объекты не обновлялись, чтобы идти в ногу с новыми технологиями, такими как привязки, не так много примеров или документации (многие учебные пособия устарели, а некоторые даже появились до OS X).Даже для опытных программистов Cocoa существует множество «подводных камней» в способе передачи объектов по сети в виде копии или прокси-объекта.Например, вы можете передать NSURL с сервера, и все будет нормально, если вы преобразуете его в строку или посмотрите на него в отладчике, но ваш клиент выйдет из строя, если вы попытаетесь использовать его в NSURLConnection.
В зависимости от вашего опыта может быть проще и быстрее использовать веб-сервис, но все же стоит подумать, хотите ли вы сохранить весь проект в Cocoa.Вот руководство если вы хотите увидеть пример.
Как правило, применимы идеи всех других инфраструктур клиент/сервер.
Взгляните на эту ссылку: http://developer.apple.com/internet/webservices/webservicescoreandcfnetwork.html
Я написал серверный и клиентский класс для использования в Какао.Использование этих классов очень легко создавать сервер или клиентское приложение без знаний о гнездах, и что c-stuff просто посмотрите на мой веб-сайт или в сайт проекта sourceforge.net.
Посмотрите на API для НССоединение и NSСкачать для обработки сетевого подключения.А НСстринг класс также имеет такие методы, как + stringWithContentsOfURL:кодировка:ошибка: это может быть полезно.
Тогда есть НСКСМЛПарсер и NSXMLДокумент для чтения XML-данных.