4

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

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

我自己开发的通信协议基本上是 JSON。我想使用 thrift 在 PHP 端正确构造对象,然后通过 JSON 发送它,然后我的 C# 应用程序将使用 thrift --gen csharp myfile.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 回答