2012-04-23 9 views
0

В Mac OS X у меня есть процесс, который создает объекты JSON, и другой прерывистый процесс, который должен их использовать. Производители и потребители не зависят друг от друга. Объекты будут создаваться не чаще, чем каждые 5 секунд, и, как правило, несколько сотен байтов, но иногда могут превышать мегабайты. Объекты должны передаваться в первую очередь. Потребитель может или не может работать, когда производитель производит, и может или не может сразу читать объекты.Асинхронная связь между приложениями в Mac OS X

Мой boneheaded решение

  • Создание каталога.
  • Производитель записывает каждый объект JSON в текстовый файл, называет его серийным номером.
  • Когда пользователь запускает, он считывает и удаляет файлы в порядке порядкового номера, а во время его запуска использует FSEvents для просмотра этого каталога для поступления новых файлов.

Есть ли более простой или лучший способ сделать это?

ответ

0

Предполагая, что вы хотите, чтобы потребитель увидел старые файлы, это так, как это было сделано с начала времен - отвратительно, хотя это может быть.

Есть много высокотехнологичных вещей, которые выглядят более чистыми - но, честно говоря, они просто склонны добавлять сложность и/или инфраструктуру развертывания, которые добавляют хлопот. То, что вы предлагаете, работает, и оно работает хорошо, и его легко писать и поддерживать. Вам могут потребоваться какие-то файлы дозорных, чтобы отслеживать, что вы делаете для восстановления после сбоя, но это, вероятно, об этом.

Черт, большинство людей просто опросили сон 5. По крайней мере, вы все в fsevent.

Теперь, если было возможно потерять события, созданные, когда слушателя не было; и перфект был первостепенным - он мог стать более интересным. :)

1

Современный способ сделать это, как и у Льва, - использовать XPC. К сожалению, нет хорошей документации; есть a broad overview in the Daemons and Services guide и a primitive HeaderDoc-generated reference, но лучший способ познакомиться с ним - посмотреть сеанс об этом от last year's WWDC sessions.

С XPC вам не придется беспокоиться о том, чтобы серийные номера были серийными, чтобы конкурировать за вращающийся диск или на достаточном диском. Действительно, вам даже не нужно генерировать и анализировать данные JSON вообще, поскольку механизм связи XPC построен вокруг объектов контейнера и значений JSON-esque/plist-esque.