Я использую NSDistributedNotifications
, чтобы справиться с этим довольно хорошо в одном приложении, даже на 10.7.Вы должны сделать свое собственное рукопожатие, так как это может привести к потерям (то есть включить уведомление ack
и отправить повторно в случае тайм-аута).Побочным эффектом этого подхода является то, что если запущено несколько клиентов (особенно при быстром переключении пользователей), все они получают уведомления.Это хорошо в частном случае этого приложения.Это также чрезвычайно просто реализовать.
Для другого приложения я использую два FIFO.Сервер пишет одному и читает другому.Клиент делает наоборот.Конечно, вы можете также использовать сетевой сокет для достижения того же.Я предпочитаю использовать FIFO, потому что вам не нужно иметь дело с блокировкой сетевого сокета.
Тем не менее, какую проблему вы видите при использовании распределенных объектов в launchd?Вы просто видите проблемы в 10.7 (которые изменили правила для контекста launchd)?
Используете ли вы launchd для отложенной загрузки демона при доступе к порту (это нормальный способ сделать это).Рассматривали ли вы использование агента запуска вместо launchdaemon?
РЕДАКТИРОВАТЬ:
Ах ... сервер начальной загрузки.Да.Вам нужно выполнить вещи в правильном контексте начальной загрузки, чтобы поговорить с ними.Контекст начальной загрузки для сеанса входа в систему связан с процессом windowserver
.LaunchDaemons запускаются в другом контексте, поэтому они не могут напрямую взаимодействовать с сеансами входа в систему.Некоторое фоновое чтение:
Я не знаю, как получитьобрабатывает в правильном контексте без использования launchctl bsexec
.Технически у Launchd есть API (используется launchctl), но он недостаточно хорошо документирован.Вы можете получить source с opensource.apple.com.
Даже если вы останетесь с NSDistributedObject
, я постараюсь использовать что-то кроме службы начальной загрузки, если вы можете.Как я уже говорил, я склонен использовать другие инструменты и избегать NSDistributedObject
.По моему мнению, по тем же причинам, что REST лучше, чем SOAP, простые протоколы обычно лучше, чем удаленные объекты.(YMMV) * 1038 *