2

こんにちは、私は OS の独立性を維持しようとしている C++ プロジェクトに取り組んでおり、通信する必要がある 2 つのプロセスがあります。他の 2 つのプロセスを非同期で調整するために、3 つ目のプロセス (おそらくサービスとして?) をセットアップすることを考えていました。

クライアント 1 は、データの準備ができたときに中間プロセスに通知し、データを送信します。中間プロセスは、クライアント 2 がデータの準備が整ったことを通知するまで、このデータを保持します。中間プロセスがクライアント 1 から新しいデータを受信して​​いない場合、クライアント 2 に待機するように指示します。

この OS を独立させようとしているので、何を使用すればよいかわかりません。MPI の使用を検討しましたが、実際にはこの目的に適合していないようです。Boost.ASIO、名前付きパイプ、RPC、および RCF についても調査しました。現在 Windows でプログラミングしていますが、コードが Linux でコンパイルされる可能性があるため、WIN_API の使用は避けたいと考えています。

ここでは、2 つのプロセスについてもう少し詳しく説明します。

中間プロセスを介して GUI (Qt で記述されたクライアント 2) から初期入力を受け取るバックエンド プロセス/モデル (クライアント 1) があります。その後、モデルは終了条件が満たされるまで処理を続行し、準備が整うとサーバーにデータを送信します。GUI は定期的に中間プロセスにデータを要求し、モデルがデータを更新していない場合は待機するように指示されます。モデルからデータが利用可能になると、ユーザーが選択した場合にファイルにエクスポートするために、現在のセッションからの以前のデータを保持できるようにすることも必要です (つまり、GUI がコマンドを発行するようにします)。データをエクスポート (またはロード) するためのインターフェイス)。

バックエンド/モデルの変更権限は、上で概説した設計に従う以外は最小限です。私はかなりの量の C++ の経験がありますが、並列/非同期アプリケーションの経験はあまりありません。どんな助けや指示も大歓迎です。

4

3 に答える 3

1

標準の BSD TCP/IP ソケットは、ほとんどプラットフォームに依存しません。それらは、Windows と Unices (Linux など) の両方でいくつかの小さな違いがあります。

PS Windows は AF_UNIX ソケットをサポートしていません。

于 2012-03-12T15:05:03.350 に答える
1

boost.interprocessライブラリをチェックアウトします。2 つのプロセスが同じマシン上にある場合、プロセス間で通信するためのさまざまな方法があり、プラットフォームに依存しない方法で通信します。

于 2012-03-12T15:06:04.723 に答える
0

メッセージング システムを検討したかどうかはわかりませんが、プロセス間で構造化データを送信している場合は、Google プロトコル バッファを検討する必要があります。

これらは、メッセージがどのように渡されるかではなく、メッセージの内容 (何が渡されるか) に関連しています。

boost::asio はプラットフォームに依存しませんが、両端で C++ を意味するわけではありません。もちろん、C++ を使用している場合は、boost::asio をトランスポートの形式として使用できます。

于 2012-03-12T16:07:37.707 に答える