ユース ケース : 1 つまたは 2 つの C++ プロセスを含む 1 つの Java プロセスが、常に同じマシン上にある。双方向、バイナリ、非永続通信が必要です。C++ プロセスの 1 つは、他のプロセスのインスタンス化を担当します。
XML/JSON-RPC、Protocol Buffers、Thrift、zeromq などを見て回りました。
できれば移植性があればいいのですが、Windows XP/7 が必要です。
ユース ケース : 1 つまたは 2 つの C++ プロセスを含む 1 つの Java プロセスが、常に同じマシン上にある。双方向、バイナリ、非永続通信が必要です。C++ プロセスの 1 つは、他のプロセスのインスタンス化を担当します。
XML/JSON-RPC、Protocol Buffers、Thrift、zeromq などを見て回りました。
できれば移植性があればいいのですが、Windows XP/7 が必要です。
一般に、設計ではメッセージ トランスポートとメッセージのデシリアライゼーションを分離し、それらを可能な限り直交させておく必要があります。つまり、データ (メッセージ) フローの動作をメッセージ コンテンツから切り離します。
特定のユースケースに最適な組み合わせの選択は、設計上の決定に対する多くの要件と制約によって異なります。
考えられる解決策: Google Protobufメッセージ フレームワークと組み合わせ
たZMQ メッセージング フレームワークは、ユース ケースに実行可能なソリューションを提供できると思います。C++とJavaの言語バインディングがあり( ZMQ Java bindingを参照)、プロセス間およびスレッド間通信用に最適化された実装が得られます。ZMQ 接続はソケットのような方法で設計されており、双方向 (リクエスト/応答) の通信パターンと単方向 (パブリッシュ/サブスクライブ、プッシュ/プル) をサポートしています。
前述のように、メッセージ コンテンツの形式は自由ですが、Google Protobufは、C++ および Java 言語バインディングでサポートされている内部定義のメッセージ プロトコルに適している場合があります。Google ProtobufはRPC サービス インターフェースを定義するメカニズムも提供しますが、クライアント/サーバー実装用の具体的なメッセージ トランスポート プロトコルを提供する必要があります。ZMQ トランスポートを使用してこれを実装したことはありませんが、必要に応じて可能になるはずです。
XML/JSON-RPC は、公開された (たとえば、REST サービスを介した) プロトコルと見なされる場合があります (ブリッジは ZMQ を使用するとかなり簡単です)。
あなたの要件を考慮すると、後者のプロトコル形式オプションは必須ではないと思いますが、Java/C++ 参加者で使用する予定のフレームワークによっては便利かもしれません。
AFAIK ZMQ は、Windows XP/7 プラットフォームに関する移植性の制約に一致します。確かではありませんが、Windows システムではスレッド間通信に制限がある可能性があります。しかし、それはあなたが説明したシナリオには当てはまらないようです。
代替トランスポート フレームワーク:
代替メッセージ エンコーディング/デコーディング フレームワーク:
質問のコメントからの情報によると、プロトコルバッファは考慮すべきものだと思います-ネットワーク上でバイナリ形式を持ち、シンプルなAPIを持ち、永続化などの冗長なものを提供しません。