9

クロスランゲージ オーバー ザ ワイヤ バイナリ フォーマットとして、Google Protocol Buffers または Caucho Hessian をお勧めしますか? または、それ以外の何か - たとえば、Facebook Thrift?

4

8 に答える 8

9

統合コストの削減と単純さのために、Caucho Hessian を使用します。パフォーマンスは非常に優れているため、ほとんどの場合に最適です。

言語間の統合がそれほど重要ではないいくつかのアプリには、 Kryoと呼ばれるさらに高速なライブラリがあり、さらにパフォーマンスを向上させることができます。残念ながら、それはそれほど広く使用されておらず、そのプロトコルは Hessian のもののような準標準ではありません。

于 2010-06-26T11:20:57.340 に答える
5

ユースケースによります。PB はより密接に結合されており、密接に結合されたシステムで内部的に使用するのが最適です。共有/パブリック インターフェイスには適していません (2 つ以上の特定のシステム間で共有される場合など)。Hessian はもう少し自己記述的で、Java で優れたパフォーマンスを発揮します。私のテストではPBよりも優れていますが、ユースケースに依存していると確信しています. PB はテキスト データに問題があるようです。おそらく、整数データ用に最適化されています。

どちらもパブリック インターフェイスに特に適しているとは思いませんが、バイナリ形式が必要な場合は、おそらく大きな問題にはなりません。

編集: jvm-serializersベンチマークによると、ヘッセ行列のパフォーマンスは実際にはそれほど良くありません。また、Java で高速オプションの使用を強制するフラグを確実に追加する限り、PB はかなり高速です。PB がパブリック インターフェイスに適していない場合、PB は何ですか? IMO、JSON のようなオープン形式は外部的に優れており、多くの場合、パフォーマンスがそれほど重要ではないほど高速ではありません。

于 2009-03-11T01:22:44.677 に答える
3

私にとっては、Caucho Hessian が最高です。

始めるのは非常に簡単で、パフォーマンスは良好です。ローカルでテストしたところ、潜在は約 3 ミリ秒で、Lan では約 10 ミリ秒を期待できます。

hessian を使用すると、モデルを定義するために別のファイルを作成する必要がありません (Java + Java を使用しています)。開発と保守にかかる時間を大幅に節約できます。

于 2011-07-22T01:39:42.543 に答える
2

多くの言語/プラットフォームからアプリを相互接続するためのサポートが必要な場合は、Hessian が最適です。Java のみを使用する場合は、Kryo よりもさらに高速です。

于 2010-07-18T11:27:28.417 に答える
1

私自身がこれを調べています。これまでのところ良い結論はありませんが、http: //dewpoint.snagdata.com/2008/10/21/google-protocol-buffers/ですべてのオプションを要約していることがわかりました。

于 2009-03-05T13:42:26.243 に答える
0

Google Protocol Buffers を試しました。C++/MFC、C#、PHP などの言語 ( http://code.google.com/p/protobuf/wiki/ThirdPartyAddOnsを参照) で動作し、トランスポートやディスクの保存/読み込みに関係なく、非常にうまく動作します。

于 2010-06-24T23:06:32.767 に答える
0

マッスルにはバイナリ メッセージ トランスポートがあります。他のものは試していないのでコメントできず申し訳ありません。

于 2009-01-20T19:57:14.053 に答える
0

ProtocolBuffers、Thrift、または Hessian は、バイナリ形式に関する限り、かなり似ていると言えます-言語間のシリアル化サポートを提供します。固有のシリアライゼーションには、それらの間にいくつかの小さなパフォーマンスの違いがある場合があります (サイズ/スペースのトレードオフ) が、これは最も重要なことではありません。ProtocolBuffers は確かにパフォーマンスの高い IDL 定義のフォーマットであり、魅力的な拡張機能を備えています。

ただし、質問での「有線」の使用は、通信ライブラリの使用を意味します。ここで、Google は protobuf RPC のインターフェイス定義を提供しています。これは、実装の詳細をすべて実装者に任せる仕様を作成することと同じです。これは、クロス言語の実装が事実上存在しないことを意味するため、残念なことです。java と c、c と c++、または python と c などをサポートする RPC 実装をいくつか見てきましたが、ここでは、具体的な要件を満たすライブラリを見つけて評価する必要があります。(少なくとも私は protobuf-rpc-pro を書くのに十分失望しました)

Kyro は protobuf のようなシリアル化形式ですが、Java のみです。Kyro/Net は、Kryo メッセージを使用した Java のみの RPC 実装です。したがって、「言語を超えた」コミュニケーションには適していません。

今日では、ICE http://www.zeroc.com/と、箱から出してすぐに使える RPC 実装を提供する Thrift が、言語間の RPC 実装としては最高のものであると思われます。

于 2013-01-13T10:50:24.477 に答える