Запуск нескольких экземпляров одной и той же службы XPC (NSXPCConnection)
Можно ли запускать несколько экземпляров одной и той же службы XPC с помощью API-интерфейсов XPC, найденных в Foundation.framework(NSXPCConnection
и т.д.)? docs не дают большого понимания этого вопроса.
EDIT. Прошел быстрый тест, и кажется, что работает только один экземпляр службы, хотя я создал два подключения XPC. Есть ли способ запустить другой экземпляр?
Ответы
Ответ 1
Я считаю, что службы XPC, предназначенные для одного экземпляра для нескольких подключений. Возможно, удобнее управлять именованными каналами с одним исполняемым исполняемым файлом. Таким образом, скорее всего, невозможно создать несколько экземпляров одновременно.
Ответ 2
Немного поздно, но окончательный ответ на этот вопрос представлен в xpcservice.plist
manpage:
ServiceType (по умолчанию: приложение)
Тип службы XPC указывает, как создается экземпляр службы. Значения:
• Приложение: каждое приложение будет иметь уникальный экземпляр этой службы.
• Пользователь: для каждого пользователя создается один экземпляр сервисного процесса.
• Система: существует один экземпляр процесса обслуживания для всей системы. Системные службы XPC ограничены для размещения в системных рамках и должны принадлежать root.
Итог: в большинстве случаев есть один экземпляр службы XPC и только в том случае, когда разные приложения могут подключаться к одной и той же службе (даже не возможно, когда служба связана с приложением), будет много экземпляры (один экземпляр для каждого приложения).
Ответ 3
Поскольку службы XPC не должны иметь состояния, не имеет значения, работает ли еще один экземпляр:
Службы XPC управляются с помощью запуска, который запускает их по требованию, перезапускает их, если они сбой, и завершает их (путем отправки SIGKILL
), когда они неактивны. Это прозрачно для приложения, использующего эту службу, за исключением случая службы, которая вылетает во время обработки сообщения, требующего ответа. В этом случае приложение может увидеть, что его соединение с XPC стало недействительным до тех пор, пока служба не перезапустит startd. Поскольку служба XPC может быть внезапно прекращена в любое время, она должна быть сконструирована так, чтобы удерживать ее до минимального состояния. В идеале ваша служба должна быть полностью безгражданна, хотя это не всегда возможно.
- Создание служб XPC
Поместите всю необходимую информацию о состоянии в вызов xpc и доставьте его клиенту, если он должен сохраняться.
Ответ 4
https://developer.apple.com/library/mac/documentation/Darwin/Reference/ManPages/man5/xpcservice.plist.5.html
Ключ ServiceType в словаре XPCService: приложение или пользователь или система
Но этот "ServiceType" не имеет значения... IF Service встроен в пакет приложений, тогда он будет доступен только для содержащего приложения и будет, по определению, услугами типа Applicaton. Последующий запрос соединения от приложения к службе приведет к новому соединению с существующей службой.
Ответ 5
Я знаю, что опаздываю на вечеринку, но пока вы не можете сделать это с помощью простого XPC,
есть библиотека (компонент OpenEmu), которая должна иметь возможность делать то, что вы просите: OpenEmuXPCCommunicator