Mac OS X上的异步交互通信

时间:2012-04-23 21:11:08

标签: macos cocoa ipc

在Mac OS X上,我有一个生成JSON对象的进程,以及另一个应该使用它们的间歇进程。 producer 使用者进程彼此独立。对象的生成频率不会超过每5秒,通常为几百个字节,但有时可能会达到兆字节。对象应先进先出。消费者在生产者生产时可能正在运行,也可能没有运行,并且可能会或可能不会立即读取对象。

我的骨头解决方案是

  • 创建目录。
  • Producer将每个JSON对象写入文本文件,并使用序列号命名。
  • 当Consumer启动时,它会按序列号顺序读取然后删除文件,并在运行时使用FSEvents来查看此目录以获取新文件。

有没有更简单或更好的方法来做到这一点?

2 个答案:

答案 0 :(得分:1)

从Lion开始,这样做的现代方法是使用XPC。不幸的是,没有好的文件记录;有a broad overview in the Daemons and Services guidea primitive HeaderDoc-generated reference,但介绍它的最佳方式是从last year's WWDC sessions观看有关它的会话。

使用XPC,您不必担心序列号是串行的,必须争夺旋转的磁盘,或者是否有足够的磁盘空间。实际上,您根本不需要生成和解析JSON数据,因为XPC的通信机制是围绕JSON-esque / plist-esque容器和值对象构建的。

答案 1 :(得分:0)

假设您希望消费者看到旧文件,这就是它从一开始就已经完成的方式 - 虽然它可能是令人讨厌的。

有很多高科技的东西看起来更干净 - 但老实说,它们往往会增加复杂性和/或部署基础设施,增加麻烦。你的建议是有效的,而且效果很好,而且编写和维护都很容易。您可能需要某种类型的标记文件来跟踪您正在为崩溃恢复做些什么,但这可能与此有关。

哎呀,大多数人只是在睡觉时进行民意调查5.至少你们都参加了这项活动。

现在,如果失去听众没有产生的事件是可以接受的;和perf是最重要的 - 它可以变得更有趣。 :)