45

gSoap を使用して、従来の C++ システムを SOA にリファクタリングしています。いくつかのパフォーマンスの問題 (非常に大きな XML) があるため、主任からプロトコル バッファを調べるように依頼されました。私はそうしましたが、とてもクールに見えます (C++ と Java のサポートが必要です)。ただし、プロトコル バッファはシリアル化のためだけのソリューションであり、Java フロントエンドに送信する必要があります。これらのシリアル化されたものを HTTP (内部ネットワークのみ) 経由で送信するには、C++ および Java の観点から何を使用すればよいですか?

PS。別の人が gSoap ソリューションの高速化を試みています。私はプロトコル バッファのみに関心があります。

4

5 に答える 5

67

HTTP 要求または HTTP 応答でバイナリ ペイロードを送信することもできます。プロトコル バッファのバイトをリクエスト/レスポンスに直接書き込み、コンテンツ タイプを「application/octet-stream」に設定してください。クライアントとサーバーは、残りを簡単に処理できる必要があります。どちらの側でも、それ以上の特別なものは必要ないと思います。

于 2009-09-15T08:53:23.923 に答える
7

protobuf でエンコードされたデータを文字列との間でシリアル化/逆シリアル化できます。シリアライズされた文字列を HTTP POST の本文として Java に送信し、デシリアライズします。それが一つのアプローチです。もう 1 つの方法は、protobuf Service インターフェイスを利用することです。Protobuf を使用すると、.proto ファイルでサービス インターフェイスを定義できます。プロトコル バッファー コンパイラは、選択した言語でサービス インターフェイス コードとスタブを生成します。完全な RPC フレームワークを取得するには、protobuf::RpcChannel クラスと protobuf::RpcController クラスを実装するだけで済みます。おそらく、これらのクラスの HTTP ラッパーを作成できます。詳細については、次のリンクを参照してください。

http://code.google.com/apis/protocolbuffers/docs/proto.html#services http://code.google.com/apis/protocolbuffers/docs/reference/cpp-generated.html#service http:// code.google.com/apis/protocolbuffers/docs/reference/cpp/google.protobuf.service.html

于 2009-09-15T09:22:23.693 に答える
2

私の知る限り、プロトコル バッファのサポートは C++ と Java の両方で利用できます。両方のシステム間でプロトコル バッファのシリアル化されたデータを交換できるはずです。

そうは言っても、あなたの本当の質問は「C ++バックエンドとJavaクライアントの間でHTTP経由でデータを送信するにはどうすればよいですか」であるようです

gSOAP の使い方を学び、ドキュメントを読む必要があるようです。

別の方法として、C++ アプリから RESTful Web サーバーをホストすることもできます

次に、新しい C++ RESTful サーバーでホストされているデータにアクセスする必要があります。これを見てください: Rest clients for Java?

于 2009-09-15T08:58:12.143 に答える