2012-01-18 15 views
0

私は次のようなシナリオがあります:サーバとMac OS Xの多くのクライアントとの間のIPC

サーバはデーモンでなければなりません。 他のアプリはクライアントである必要があります。 多くのクライアントは、一度にサーバーによって処理が完了するまでサーバーと通信する必要があります。 これらのタスクは、copyfile、deletefileなどです。

解決方法: サーバーには名前付きパイプを含む5つのワーカースレッドがあります。各パイプの可用性ステータスは、共有メモリ構造に保持されます。クライアントはサーバと通信したいときに、共有メモリからどのパイプが利用可能であるかをチェックし、そのパイプを開きます。&は、このパイプ上でメッセージを送ります。そのワーカースレッドは、そのパイプ上で要求ステータス(成功/失敗)を送信して、クライアントが最後の操作ステータスを認識するようにします。

私の知る限り、Mac OS X上のパイプは一方向です& Windowsなどの無制限のインスタンスを作成する機能がありません。

このような種類の通信にはどのようなメカニズムが最適でしょうか?

ありがとう、 Vaibhav。

+0

本当に、あなたは車輪を再発明したいですか? –

答えて

1

私の知る限り、Mac OS X上のパイプは一方向です& Windowsなどの無制限のインスタンスを作成する機能がありません。

パイプは一方向ですが、Unix socketsはありません。あなたのコードをOS Xに直接移植したい場合、これはおそらくあなたが後にしていることでしょう。Distributed Objectsなど、私が一度も使用していないことを含め、おそらくあなたがやりたいことをする良い方法があります。ソケットインターフェイスを使用していても、ソケットを監視してスレッドが到着したときに作業をスレッドに渡す方が、listenacceptを使用すると、1つのソケットが簡単になると思います。さらに良いことに、NSOperationQueueまたはディスパッチ・キューを持って作業をすると、OSはスレッド数を最適化するタスクを処理します。

関連する問題