Macos Mac OS X上的异步应用程序间通信

Macos Mac OS X上的异步应用程序间通信,macos,cocoa,ipc,Macos,Cocoa,Ipc,在MacOSX上,我有一个生成JSON对象的进程,还有一个应该使用JSON对象的间歇进程。生产者和消费者过程相互独立。对象的生成频率不超过每5秒一次,通常为几百字节,但有时可能会达到兆字节。对象应先入先出进行通信。生产者生产时,使用者可能正在运行,也可能没有运行,并且可能会或可能不会立即读取对象 我愚蠢的解决办法是 创建一个目录 Producer将每个JSON对象写入一个文本文件,并用序列号命名 当使用者启动时,它会按照序列号顺序读取并删除文件,并且在运行时,使用FSEvents监视此目录中是

在MacOSX上,我有一个生成JSON对象的进程,还有一个应该使用JSON对象的间歇进程。生产者和消费者过程相互独立。对象的生成频率不超过每5秒一次,通常为几百字节,但有时可能会达到兆字节。对象应先入先出进行通信。生产者生产时,使用者可能正在运行,也可能没有运行,并且可能会或可能不会立即读取对象

我愚蠢的解决办法是

  • 创建一个目录
  • Producer将每个JSON对象写入一个文本文件,并用序列号命名
  • 当使用者启动时,它会按照序列号顺序读取并删除文件,并且在运行时,使用FSEvents监视此目录中是否有新文件到达

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

假设你想让消费者看到旧文件,这是自时间开始以来一直采用的方法——尽管可能令人讨厌

有很多高科技的东西看起来更干净,但老实说,它们只会增加复杂性和/或增加麻烦的部署基础设施。你的建议很有效,而且效果很好,而且很容易编写和维护。您可能需要一些sentinel文件来跟踪您为崩溃恢复所做的工作,但可能仅此而已

见鬼,大多数人都会用睡眠5来投票。至少你们都参加了这次活动


现在,如果可以丢失侦听器不在时生成的事件;而性能是最重要的——它可以变得更有趣。:)

现代的方法是使用XPC,如Lion。不幸的是,没有很好的文档;有很多,但最好的介绍方式是从电视上观看关于它的课程

有了XPC,您就不必担心序列号是否保持串行,不必为旋转的磁盘而竞争,也不必担心是否有足够的磁盘空间。实际上,您甚至不必生成和解析JSON数据,因为XPC的通信机制是围绕JSON-esque/plist-esque容器和值对象构建的