XPC服务
简介
XPC Services API提供了基于序列化属性列表的低级(libSystem)进程间通信机制。
Access a low-level (libSystem) interprocess communication mechanism that is based on serialized property lists.
一个复杂的应用内部往往有多个协作的功能单元。传统架构上的应用一个模块的 Bug 经常会导致整个应用 Crash 奔遗。XPC 引入的进程间通信的机制可以很好的解決这个问题。
XPC 带来了 2 个明显的优势:
-
- 增强了应用的稳定性单独的模块 Crash 不会导致整个应用的 Crash. Launchd 会自动重启 Crash的 XPC 模块服务
-
- 更好的隔离,XPC 服务仅仅暴漏服务接口。内部的数据结构、私有据都在自己独立的沙盒里面得到了更好的隔离保护
XPC技术同时适用于OS/OSX 平台。
XPC 目的是提高 App 的安全性和稳定性。XPC 让进程间通信变得更容易,让我们能够相对容易地将 App 拆分成多个进程的模式。更进一步的是,XPC 帮我管理了这些进程的生命周期,当我们需要与子进程通信的时候,子进程已经被 XPC 给运行起来了。
当我们希望让别的进程分担自己的任务,同时又能够及时的和主进程进行通信(比如一些网络处理的服务),这时候XPC就派上用场了。
XPC架构
XPC 是一种双向通信进程间通信架构。主应用可以调用 XPC 服务提供的接口获取特定功能,XPC 服务也可以反向调用主应用提供的服务
从图中可以看出App是服务的请求方,而XPC Service是服务的提供方:
- XPC 服务请求方:
-
- 通过服务名称查找服务
-
- 注册服务接口
-
- 调用服务
-
- XPC 服务提供方:
-
- 监听服务调用,建立通信通道
-
- 绑定服务接口到服务请求连接
- 3.绑定服务对象到服务请求连接
- 4.等待服务调用
-
exportedobject为服务实现者对象,exportedInterface为服务协议接口。
从上面架构图来看 App<-> XPC 之间都可以设置 exportedObject
和 exportedInterface
,因此可以实现双向接口调用。