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 倍

RPC-Thrift

基于thrift的java和python分别作为客户端和服务端的调用实现

Java Thrift服务器和客户端创建

Java Thrift服务器和客户端创建