需要帮助在cocoa中实现进程间通信

时间:2014-12-21 10:52:33

标签: cocoa object distributed

我开发了一个cocoa应用程序,现在我想运行它的几个实例(本地)。 但是所有正在运行的应用程序实例都必须共享一些资源。

因此,我认为制作一台服务器"键入可以处理令牌并共享必需资源的第三个应用程序。

然后我搜索一种方法,然后找到"分布式对象"溶液

然后我开始使用互联网上的几个例子来实现它,但总是有关于弃用或ATC的警告或错误......

有人可以给我一个关于如何实现这个的最新例子吗?

编辑:

我需要做的是:

  • 识别服务器上的每个应用实例
  • 应用程序向服务器发送"运行"在运行强制进程之前请求并等待令牌
  • 服务器使用FIFO堆栈存储"运行"请求
  • 服务器将令牌提供给应用实例
  • 应用程序发送"流程结束"到服务器,将令牌提供给以下应用程序实例 等
  • 服务器还必须处理App disconnect

感谢您的帮助,

1 个答案:

答案 0 :(得分:2)

您可能希望使用XPC服务而不是分布式对象。 XPC 较新沙盒友好(如果您想通过App Store分发,则非常重要)。 Daemons and Services Programming Guide为您提供了XPC的概念性概述,然后介绍了一些。

但是,您想要决定如何最好地设计您的应用程序,因为您最了解自己的要求。查看Designing Daemons and Services部分,了解整体设计的可能路线和最佳实践。如果您的应用程序完全在用户空间中运行(对于系统上的所有用户都不是#34;"),您可以使用"登录项"作为您的服务器应用程序,如果您想提供用于启动和管理任务的UI。

任务本身将是XPC Service的实例。如果我的上述假设是正确的,您可能希望为远程过程NSXPCConnection API实例使用calls between the login item app and its XPC service(最高级别的XPC API)。您将使用您开发的协议为您的应用创建并保留NSXPCInterface实例。对于您运行的每个任务实例,您将使用该界面建立一个NSXPCConnection(您必须坚持每一个直到它完成)。

服务的侦听器实例将与服务的委托对象(您的设计)进行通信,以决定是否接受连接以及如何响应您的接口协议。建立连接后(上面的链接中列出了几个步骤),您可以通过连接实例-remoteObjectProxy开始发送协议定义的消息(例如:{{1 }})。该服务将通过回复(通过调用应用程序的-exportedObject方法,通过其连接提供)向您的应用程序发回消息。

如果主应用程序是多用户或您打算进行通信,则详细信息和方法会有所改变(对于#34;登录项目"或者到#34;启动守护程序/代理程序"等)在另一台主机上运行服务,但我根据我认为你想要实现的目标进行回复。

我希望这会有所帮助。