2012-01-18 29 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或一個調度隊列來完成工作,然後操作系統將處理優化線程數的任務。

相關問題