2012-01-18 70 views
0

我有以下情形:服务器与Mac OS X上的许多客户端之间的IPC

服务器应该是守护程序。 其他应用程序应该是客户端。 许多客户端应该与服务器进行通信,以便一次完成由服务器完成的任务。 这些任务如复制文件,删除文件等

我的解决方案: 服务器有5个工作线程,每个包含命名管道。每个管道的可用性状态保存在共享内存结构中。当客户端想要与服务器通信时,它会检查共享内存中的哪个管道可用,然后打开管道&在该管道上发送其消息,该管道是该客户端请求的服务器服务器的相应工作线程。该工作线程在该管道上发送请求状态(成功/失败),以便客户端知道上次的操作状态。

据我所知,Mac os上的管道是单向的&他们缺乏创建像Windows这样的无限实例的能力。

什么样的机制最适合这种沟通?

谢谢, Vaibhav。

+0

你确定,你想重新发明轮子吗? – 2012-01-18 12:51:26

回答

1

据我所知,Mac os上的管道是单向的&他们缺乏创建像Windows这样无限制实例的能力。

管道是单向的,但是Unix sockets不是。如果你想直接将你的代码移植到OS X,这可能就是你想要的了。

但是,可能有更好的方法来做你想做的事情,包括我承认自己从未使用过的东西,比如Distributed Objects。即使你坚持使用套接字接口,我认为使用listenaccept来监视套接字并将工作交给工作线程时,一个套接字会更容易。更好的是,有一个NSOperationQueue或一个调度队列来完成工作,然后操作系统将处理优化线程数的任务。

相关问题