Mac OS X 上的异步应用程序间通信
Posted
技术标签:
【中文标题】Mac OS X 上的异步应用程序间通信【英文标题】:Asynchronous interapplication communication on Mac OS X 【发布时间】:2012-04-23 21:11:07 【问题描述】:在 Mac OS X 上,我有一个生成 JSON 对象的进程,以及另一个应该使用它们的间歇性进程。 生产者和消费者进程是相互独立的。对象的生成频率不会超过每 5 秒一次,通常是几百字节,但有时可能会达到兆字节。对象应该是先进先出的。当生产者正在生产时,消费者可能会或可能不会运行,并且可能会或可能不会立即读取对象。
我的愚蠢解决方案是
创建一个目录。 Producer 将每个 JSON 对象写入一个文本文件,并用序列号命名。 Consumer 启动时,它会按序列号顺序读取然后删除文件,并在运行时使用 FSEvents 监视此目录是否有新文件到达。有没有更简单或更好的方法来做到这一点?
【问题讨论】:
【参考方案1】:在 Lion 中,实现此目的的现代方法是使用 XPC。不幸的是,没有很好的文档。有a broad overview in the Daemons and Services guide 和a primitive HeaderDoc-generated reference,但了解它的最佳方式是观看来自last year's WWDC sessions 的会议。
使用 XPC,您不必担心保持序列号连续、不必争夺旋转磁盘或是否有足够的磁盘空间。事实上,您甚至根本不需要生成和解析 JSON 数据,因为 XPC 的通信机制是围绕 JSON-esque/plist-esque 容器和值对象构建的。
【讨论】:
【参考方案2】:假设您希望消费者查看旧文件,这就是从一开始就采用的方式 - 尽管它可能令人讨厌。
有很多看起来更干净的高科技产品 - 但老实说,它们只会增加复杂性和/或增加麻烦的部署基础架构。您的建议有效,而且效果很好,并且易于编写和维护。您可能需要某种哨兵文件来跟踪您为崩溃恢复所做的工作,但可能仅此而已。
该死,大多数人只会用 sleep 5 进行投票。至少你们都在 fsevent 中。
现在,如果在侦听器不在时丢失生成的事件是可以接受的;性能是最重要的——它可能会变得更有趣。 :)
【讨论】:
以上是关于Mac OS X 上的异步应用程序间通信的主要内容,如果未能解决你的问题,请参考以下文章
Mac OS X 上的 Cocoa Websocket 服务器