我想知道是否可以使用apache thrift的序列化部分。
我基本上已经创建了一个自定义通信协议,并希望将一个thrift对象从我的服务器(PHP)传递给客户端(C#)。
我自己开发的通信协议基本上是JSON。我想使用thrift在PHP端正确构造对象,然后通过JSON发送它,然后我的C#app将使用thrift生成的类重新构造对象--gen csharp myfile.thrift
有谁知道这是可能的还是我会开始的?我会以某种方式超载TProtocol吗?
先谢谢了! 〜乔希
答案 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。