使用自己的apache thrift通信协议?

时间:2012-08-15 22:36:31

标签: c# php thrift thrift-protocol

我想知道是否可以使用apache thrift的序列化部分。

我基本上已经创建了一个自定义通信协议,并希望将一个thrift对象从我的服务器(PHP)传递给客户端(C#)。

我自己开发的通信协议基本上是JSON。我想使用thrift在PHP端正确构造对象,然后通过JSON发送它,然后我的C#app将使用thrift生成的类重新构造对象--gen csharp myfile.thrift

有谁知道这是可能的还是我会开始的?我会以某种方式超载TProtocol吗?

先谢谢了! 〜乔希

2 个答案:

答案 0 :(得分:2)

是的,您可以仅将Thrift用于对象定义。我们做了类似的事情,虽然我们使用二进制格式而不是使用JSON。

您可以扩展TProtocol,或者您可以让自己的类询问您创建的Thrift对象,并拉出并编码您的字段。然后,当您收到JSON时,只需根据您收到的值创建一个新的Thrift对象。

取决于您如何实现它,以及C#和PHP的客户端库有多好(我还没有使用过),您可能能够以某种方式实现它,这样您就不必更改代码了虽然您仍然需要生成Thrift对象并进行部署,但您更改了架构。基本上,您遍历对象并使用JSON编码每个项目。我们在Java中做到了这一点。

答案 1 :(得分: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。