Android 上的 Thrift 客户端
Posted
技术标签:
【中文标题】Android 上的 Thrift 客户端【英文标题】:Thrift client on Android 【发布时间】:2013-10-02 15:51:02 【问题描述】:我是 android 开发新手,想创建一个带有节俭客户端的应用,该客户端在我的网络上使用节俭服务器。我已经拿到了thrift定义文件和thrift编译器生成的java代码。
我需要如何开始?如何将 thrift 库添加到我的项目中?我是否需要自己编译它,如果是,我应该如何完成它才能与 android 兼容?
可以直接使用类似这样的自动生成函数吗
public void getProduct(int productID, org.apache.thrift.async.AsyncMethodCallback resultHandler)
对我的服务进行异步调用以便我遵循 android 最佳实践?或者使用此功能是否会以任何方式阻止我的应用程序,或者在 android 上是否有其他方式优于此功能?
我使用当前版本的 googles ADT (eclipse)。我的应用只需要在 android 4+ 设备上运行(我将 minSdkVersion 设置为 15
)。
【问题讨论】:
【参考方案1】:很抱歉提出一个老问题。截至 2016 年 2 月,有一个特定于 Android 的 Thrift 编译器和客户端:https://github.com/Microsoft/thrifty。
它生成的类使用尽可能少的方法(远小于 Apache 实现),并且生成的客户端默认是异步的。
【讨论】:
Thrifty 很酷,但缺少一个关键特性:能够从字节数组中反序列化已知的 Thrift 对象——相当于 Apache Thrift 中的 TDeserializer。结果是,如果你有自己的 RPC 系统,你就不能使用 Thrifty。 虽然没有直接模拟 TDeserializer,但您可以使用每种类型的内置 Adapter 来近似它。自 0.3.0 版起添加了缺失的部分(获取所述适配器的抽象方法)。我们对 Thrifty 的使用实际上是与自定义 RPC 系统一起使用的。我们不得不做一些脚手架,但这绝对是可能的。 这真是个好消息。谢谢你。我会尽快尝试的。【参考方案2】:是的,您需要自己构建适用于 Android 的 thrift-lib。 Android 有自己的 httpcore,没有使用方法。在这里您可以找到如何更改节俭库:here instruction 之后只需将 jar 文件添加到 libs 文件夹并将其添加到构建路径。
例子
THttpClient hclient = new THttpClient("your/endpoint/url");
TProtocol protocol = new TBinaryProtocol(hclient); // it depends on your data-format
Service.Client client = new Service.Client(protocol);
Product product = client.getProduct(int productID);
您需要将其作为 Android AsyncTask 执行:AsyncTask | Android Developers
【讨论】:
以上是关于Android 上的 Thrift 客户端的主要内容,如果未能解决你的问题,请参考以下文章
Thrift RPC 从 c# 中的 thrift 客户端失败到在 HBase 服务器上旋转的 thrift 服务器
Haskell Thrift 库在性能测试中比 C++ 慢 300 倍