问题描述
|
我有一个用Objective-C在Cocoa上编写的应用程序,具有一些UI。我打算编写另一个可以在后台运行并自动启动的Java应用程序(本质上是一个dameon)。然后,Cocoa应用程序将与Java应用程序“通信”,以开始定期或按需执行某些任务。那可行吗?如果是这样,那么就编程复杂性而言,两者之间最好的通信方式是什么?插座?通过文件?命名管道?
解决方法
这当然是可行的。有很多潜在的机制,但是它们都归结为选择了一些进程间通信机制。但是,为什么要将Java应用程序用作守护程序?显而易见的事情是,您的Cocoa应用程序只能运行Java应用程序。
如果事实证明是出于某种原因(例如Java应用程序具有很多持久状态,或者启动时间很长),那么最简单的方法可能是使用命名管道a / k / a FIFO。创建FIFO后,您可以简单地从UI进程对其进行写入,然后从Java中将其作为文件读取。这还具有一个额外的优点,即它提供了自然的事件队列(这就是它的作用,这就是为什么将其称为FIFO)。
, 您如何定义“最佳”?最快的?设置最简单?交易安全吗?
也许最简单的方法是让您的Java应用程序在单独的线程上启动http或xmlrpc服务器。有很多客户端和服务器库可以提供帮助。附带的好处是,它使Java应用程序更易于测试,因为您可以在开发过程中使用curl等命令行工具来模拟可可应用程序。