Cocoa клиент/серверное приложение

Есть ли способ в Cocoa, который в настоящее время считается наилучшей практикой для создания многоуровневого или клиентского сервера?

Я опытный веб-разработчик, и я действительно люблю Python. Я новичок в Cocoa. Приложение, которым я занимаюсь письмом, - это система управления пациентами для большой больницы. Ожидается, что система будет хранить огромное количество данных с течением времени, но данные, передаваемые в течение одного сеанса, очень легкие (в основном, просто текст). Предполагается, что связь происходит по локальной сети (проводной или беспроводной). Конечно, он должен быть очень безопасным.

Лучшее, что я мог придумать, - написать веб-службу REST Python и подключиться к ней через приложение Cocoa. Возможно, я даже использую Python для кодирования самого приложения Cocoa.

Глядя на Cocoa, я вижу действительно отличные технологии в Cocoa, такие как CoreData, но я не мог найти ничего подобного для развития клиентского сервера. Я просто хочу убедиться, что я ничего не пропустил.

Как вы думаете?

Приветствуются примеры реального мира.

Спасибо заранее.

Ответ 1

Если у вас есть контроль над клиентом и сервером, и вы можете ограничить клиент только OS X, я отвечу второй Marc. Cocoa распределенные объекты - это потрясающая технология и очень удобные приложения для клиентского сервера RPC.

Если приведенные выше требования слишком ограничительны для вас, у вас все еще есть много вариантов в мире Cocoa:

  • Вы можете закодировать все клиентское приложение на Python с помощью PyObjC. При таком подходе вы можете использовать стандартный сетевой код, который вы знаете из стандартной библиотеки Python. Twisted также прекрасно сочетается с циклом запуска Cocoa (примеры в примере кода PyObjC), и у меня был большой успех используя Twisted для сетевой связи с помощью приложения Cocoa. Если вы решите пойти по этому маршруту, вы можете запрограммировать клиентское приложение в Objective-C и загрузить код python в качестве плагина (используя NSBundle). PyObjC py2app может скомпилировать загружаемые пакеты из кода python.

  • Вы можете использовать NSURLConnection для высокоуровневого доступа к HTTP-серверу.

  • Сбрасывая уровень абстракции, вы можете использовать Cocoa NSStream для реализации сетевого протокола. Документация класса здесь, со ссылками на пример кода, демонстрирующего протоколы HTTP и SOAP.

  • Вы можете понизить уровень ниже и использовать классы CFNetwork. NSStream основан на CFNetwork, но у вас есть контроль более низкого уровня по линии с использованием CFNetwork.

Наконец, технология Apple для архитектуры клиент-сервер - это WebObjects framework.

Ответ 2

Cocoa имеет Portable Distributed Objects, который позволяет вам создавать клиент-серверное приложение в чистых Objective-C и Cocoa, которые может связываться через процессы или через сеть.

К сожалению, это одна из самых трудных вещей, которые нужно изучить в Cocoa. Распределенные объекты не обновлялись, чтобы идти в ногу с новыми технологиями, такими как привязки, там не так много примеров или документации (и многие из учебников старые, некоторые даже до начала OS X). Там также много "gotchas", даже для опытных программистов Cocoa, в том смысле, что объекты передаются по кабелю либо в виде копии, либо через прокси-объект. Например, вы можете передать NSURL с сервера, и это будет хорошо, если вы преобразуете его в строку или посмотрите на нее в отладчике, но ваш клиент потерпит крах, если вы попытаетесь использовать его в NSURLConnection.

В зависимости от вашего опыта может быть проще и быстрее использовать веб-сервис, но он все равно стоит посмотреть, если вы хотите сохранить весь проект в Cocoa. Здесь учебник, если вы хотите увидеть пример.

Ответ 4

Я написал сервер и класс клиента для использования в Cocoa. Использование этих классов позволяет легко создавать серверное или клиентское приложение без знания о сокетах и ​​том, что C-stuff Просто посмотрите мой сайт или на проект sourceforge.net сайт.