我已经阅读了 NSXPC* 文档,该文档建议使出售的服务尽可能无状态。这是一个好主意,至少对于我读过的文档和示例而言,因为服务和调用应用程序将彼此视为单例,并且一次只运行一个服务实例。这意味着这些方法本质上是非成员函数(使用 C++ 术语)。
我为什么要解决这个问题?我想将网络代码放入 XPC。由于 XPC 将使用具有多个窗口的 GUI 应用程序,因此我需要支持多个同时连接。这不适用于单身人士,至少直接如此。
网络 API 是基于 C 的,主要状态类型是指向自定义struct
. 那么我们为什么不做类似的事情:
- 让创建函数返回一个值类型,比如
NSUUID
什么。(跨进程传递指针是个坏主意。) - 在服务中,在 API C 指针和 API C 指针之间创建
NSDictionary
(std::map
或其他)映射。NSUUID
- 各种服务 API 获取
UUID
并将其转换为 C 指针以使用网络 API。
另外:由于token是随机的,如果XPC服务崩溃,XPC重启后主应用会有一个无用的token。也许我应该使用一个 URL(它将包含所有重新启动的信息)。但是,如果两个连接碰巧在同一台服务器上,我们就会遇到潜在的冲突。也许我可以将这些想法与作为 URL/UUID 对的令牌结合起来。(UUID 值将从服务返回变为由主应用程序提供。)
这是实现全状态 XPC 的好方法吗?