Вопрос

Я смотрю на создание приложения какао на MAC с процессом задней части демона (на самом деле только в основном без головы приложение какао), наряду с 0 или более «клиентским» приложениями, работающими на местном уровне (хотя, если возможно, я бы Хотелось также поддерживать удаленные клиенты; удаленные клиенты когда-либо будут остальными устройствами Mac или iPhone OS).

Сообщение с передачей данных будет довольно тривиальным, в основном только в тексте и командам (которые я думаю, могут быть представлены в качестве текста в любом случае), и, возможно, случайный небольшой файл (изображение возможно).

Я посмотрел на несколько методов для этого, но я не уверен, что «лучше всего» для задачи под рукой. Вещи, которые я считал:

  • Чтение и запись в файл (... да), очень простое, но не очень масштабируемое.
  • Чистые розетки (у меня нет опыта с розетками, но я, кажется, думаю, что могу использовать их, чтобы отправить данные локально и по сети. Хотя это кажется громоздким, если все в какао
  • Распределенные объекты: кажется довольно нерешенным для этой задачи
  • NSConnection: Я не могу действительно выяснить, что делает этот класс даже, но я прочитал это в некоторых результатах поиска IPC

Я уверен, что есть вещи, которые мне не хватает, но я был удивлен, чтобы найти недостаток ресурсов на эту тему.

Это было полезно?

Решение

Я в настоящее время глядя в те же вопросы. Для меня возможности добавления клиентов Windows позже затрудняет ситуацию более сложной; В вашем случае ответ кажется проще.

О параметрах, которые вы рассмотрели:

  1. Управляющие файлы: Хотя можно взаимодействовать через файлы управления, вы должны иметь в виду, что файлы должны быть переданы через сетевую файловую систему среди задействованных машин. Таким образом, сетевая файловая система служит абстракцией фактической сетевой инфраструктуры, но не предлагает полную мощность и гибкость в сети нормально имеет. Реализация: Практически вам нужно будет иметь как минимум два файла для каждой пары клиента / серверов: файл, который сервер использует для отправки запроса клиенту и файла для ответов. Если каждый процесс может сообщать оба способа, вам нужно дублировать это. Кроме того, как клиент (ы), так и сервер (ы) работают на основе «тяги», т. Е. Необходимо часто пересматривать файлы управления и посмотреть, было ли что-то новое поставлено.

    Преимущество этого решения заключается в том, что он минимизирует необходимость изучения новых методов. Большой недостаток в том, что он имеет огромные требования к логике программы; Многие вещи должны быть позаботились о вас (будут ли файлы будут написаны в одной части или могут случиться, что любая вечеринка поднимает непоследовательные файлы? Как часто должны быть реализованы проверки? Нужно ли беспокоиться о файловой системе, Как кэширование и т. Д. Могу ли я добавить шифрование позже, не играя с вещами за пределами моего программного кода? ...)

    Если переносимость была проблемой (которая, насколько я поняла из вашего вопроса, не является случай), то это решение было бы легко порту в разные системы и даже различных языков программирования. Однако я не знаю о каких-либо сетевых файлах YSTEM для ОС iPhone, но я не знаком с этим.

  2. Розетки: Интерфейс программирования, безусловно, отличается; В зависимости от вашего опыта работы со структурой сокета, это может означать, что у вас есть больше работы, изучая его сначала и отладка его позже. Реализация: Практически вам понадобится подобная логика, как и прежде, т. Е. Клиент (ы) и сервер (ы), связывающие через сеть. Определенный плюс этого подхода состоит в том, что процессы могут работать на «толчке», то есть они могут слушать сокет до тех пор, пока не прибудет сообщение, который превосходит проверку файлов управления. Коррупция и несоответствия сети также не являются вашей заботой. Кроме того, вы (май) имеют больше контроля над тем, как установлены соединения, а не полагаются на вещам за пределами контроля вашей программы (опять же, это важно, если вы решите добавить шифрование позже).

    Преимущество состоит в том, что многие вещи сняты с ваших плеч, которые будут беспокоить реализацию в 1. Недостаток заключается в том, что вам все равно нужно существенно изменить свою логику программы, чтобы убедиться, что вы отправляете и получаете правильную информацию (типы файлов так далее.).

    В моем опыте портативность (т. Е. Легкость перехода к различным системам и даже языкам программирования) очень хороша, поскольку что-либо даже удаленно совместимо с POSIX.

    [РЕДАКТИРОВАТЬ: В частности, как только вы общаетесь эндианс двоичных номеров, становится проблемой, и вы должны заботиться об этой проблеме вручную - это обычный (!) Специальный случай «правильной информации», которую я упомянул выше. Он будет укусить вас, например, когда у вас есть PowerPC, разговаривая с Intel Mac. Этот особый случай исчезает с решением 3. + 4. Вместе все другие «правильные информации» проблемы.

  3. +4. Распределенные объекты: То NSProxy Кластер кластера используется для реализации распределенных объектов. NSConnection Отвещает за настройку удаленных подключений в качестве предварительного условия для отправки информации вокруг, поэтому, как только вы понимаете, как использовать эту систему, вы также понимаете распределенные объекты. ; ^)

    Идея состоит в том, что ваша логика программы высокого уровня не должна изменяться (т. Е. Ваши объекты взаимодействуют с помощью сообщений и получают результаты, а сообщения вместе с типовыми типами, идентичны тому, что вы используете из вашей местной реализации), не имея Чтобы беспокоиться о спецификациях сетевой инфраструктуры. Ну, по крайней мере, в теории. Реализация: Я также работаю над этим прямо сейчас, поэтому мое понимание все еще ограничено. Насколько я понимаю, вам нужно настроить определенную структуру, то есть вам все равно приходится решать, какие процессы (локальные и / или удаленные) могут получать какие сообщения; это что NSConnection делает. На данный момент вы неявно определяете архитектуру клиента / серверов, но вам не нужно беспокоиться о проблемах, указанных в 2.

    На сервере проекта Gnustep появляется введение с двумя явными примерами; Он иллюстрирует, как работает технология и является хорошей отправной точкой для экспериментов:http://www.gnustep.org/resources/documentation/developer/base/programmingmanual/manual_7.html.

    К сожалению, недостатки являются полной потерей совместимости (хотя вы все равно будете делать в порядке с установкой, которые вы упомянули только на Mac и iPhone / iPad) с другими системами и потерей переносимости на другие языки. Gnustep с целью Coverive-C находится в лучшем случае, совместимый с кодом, но нет возможности общаться между Gnustep и Cocoa, см. Мого редактировать к вопросу № 2 здесь: CORBA на Mac OS X (какао)

    [РЕДАКТИРОВАТЬ: Я только что столкнулся с другой информацией, о которой я не знал. Пока я проверил, что NSProxy Доступен на iPhone, я не проверял, есть ли другие части механизма распределенных объектов. Согласно этой ссылке: http://www.cocoabuilder.com/archive/cocoa /224358-big-picture-relationships-between-nsconnection-nsinputstream-nsoutputstream-etc.html. (Поиск на странице для фразы «iPhone OS») они нет. Это исключит это решение, если вы требуете использовать iPhone / iPad в этот момент.

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

Другие советы

Отказ от ответственности: Распределенные объекты не доступно на iPhone.


Почему вы найдете Распределенные объекты Изулегант? Здесь звучат как хороший матч:

  • Прозрачный маршаллинг фундаментальных типов и классов объектов-С
  • Это не имеет значения, что клиенты не имеют значения, являются местными или удаленными
  • Не много дополнительной работы для приложений на основе какао

Документация может заставить его звучать как больше работы, то она на самом деле есть, но все, что вы в основном должны сделать, это использовать протоколы чисто и экспортировать, или соответственно подключаться к серверам корневого объекта.
Остальные должны происходить автоматически за кулисами для вас в данном сценарии.

Мы используем Thomonetworking И это работает нормально и быстро настроить. В основном это позволяет отправлять Nscoding Custiated объекты в локальной сети, но, конечно, также работает, если клиент и сервер находятся на том же машине. Как обертка вокруг классов фундамента, оно заботится о сопряжении, переподключении и т. Д.

Лицензировано под: CC-BY-SA с атрибуция
Не связан с StackOverflow
scroll top