4

apachethriftのシリアル化部分だけを使用できるかどうか疑問に思いました。

基本的に、カスタム通信プロトコルをすでに作成していて、サーバー(PHP)からクライアント(C#)にthriftオブジェクトを渡したいと考えています。

私の自家製の通信プロトコルは基本的にJSONです。thriftを使用してPHP側でオブジェクトを適切に構築し、それをJSONで送信して、C#アプリがthrift --gencsharpmyfile.thriftによって生成されたクラスを使用してオブジェクトを再構築したかったのです。

これが可能かどうか、またはどこから始めればよいか誰かが知っていますか?どういうわけかTProtocolをオーバーロードしますか?

4

2 に答える 2

2

はい、オブジェクト定義にのみThriftを使用できます。JSONを使用する代わりにバイナリ形式を使用しますが、同様のことを行います。

TProtocolを拡張することも、独自のクラスで作成したThriftオブジェクトに問い合わせて、フィールドを引き出してエンコードすることもできます。次に、JSONを受け取ったら、受け取った値から新しいThriftオブジェクトを作成するだけです。

実装方法や、クライアントライブラリがC#とPHPにどれだけ適しているか(私も使用していません)によっては、コードを変更するときにコードを変更する必要がないように実装できる場合があります。スキーマ。ただし、Thriftオブジェクトを生成してデプロイする必要があります。基本的に、オブジェクトをウォークスルーし、各アイテムをJSONでエンコードします。これはJavaで行いました。

于 2012-10-29T11:21:37.070 に答える
1

C#クライアントの場合、Thrift.Protocol.TJSONProtocolを使用して、次のように入力ストリームから読み取ることができます。

TBase object; // replace TBase here with your thrift generated type
TJSONProtocol jsonIn = new TJSONProtocol(new TStreamTransport(inputStream, null));
object.Read(jsonIn);

PHP側でも同様の方法でjsonを生成できるはずです。

于 2013-03-06T22:38:29.260 に答える