`

thrift使用出现诡异问题

 
阅读更多

1. 发现问题

a.问题

在使用thrift接口时出现丢失数据问题,输出对象正常是输出user和device信息,但是两种只能输出其中一个,出现丢失数据问题。

b. 应用环境

thrift 0.8.0

python 2.6.5

c.接口使用协议

TTransport.TBufferedTransportFactory

TCompactProtocol.TCompactProtocolFactory

 

2.找问题

a.确定服务器端已经写了数据user和device

b.客户端始终读取不到数据

c.更换其他版本thrift的py client ,还是不行

d.在同事那里找了一个thrift_py 0.6的自定义修改版本,问题解决

当前采用:

TTransport.TFramedTransportFactory

TCompactProtocol.TBinaryProtocolFactory

处理了中文问题

e.在该py客户端下当修改为:

TTransport.TBufferedTransportFactory

TCompactProtocol.TCompactProtocolFactory

继续有问题,不调用服务报错

go on协议修改为:

TTransport.TBufferedTransportFactory

TCompactProtocol.TBinaryProtocolFactory

ok没有问题,纠结啊

f.再替换使用thrift 0.8.0的client

使用

TTransport.TBufferedTransportFactory

TCompactProtocol.TBinaryProtocolFactory

TTransport.TBufferedTransportFactory

TCompactProtocol.TCompactProtocolFactory

继续丢数据

修改thrift 0.8.0的client可处理中文后

TTransport.TBufferedTransportFactory

TCompactProtocol.TCompactProtocolFactory

继续丢数据

TTransport.TBufferedTransportFactory

TCompactProtocol.TBinaryProtocolFactory

TTransport.TFramedTransportFactory

TCompactProtocol.TBinaryProtocolFactory

ok,没有问题都能正常使用

 

3.解决方法

修改TBinaryProtocol.py

line 121 writeString方法:

  def writeString(self, str):
    if type(str) is unicode:
      str = str.encode('utf-8')
    self.writeI32(len(str))
    self.trans.write(str)

  thrift协议修改为:

TTransport.TBufferedTransportFactory

TCompactProtocol.TBinaryProtocolFactory

运行成功!

 

4. 总结

thrift赶紧修改bug吧

多沟通,闭门造车也许可能,但绝对浪费时间

同时让我们继续纠结吧。。。。

分享到:
评论
1 楼 xushenkun4 2014-03-04  
至今仍然有这个bug,0.9.1
无法传输中文utf8。

相关推荐

    C++(Qt)下的thrift的使用示例

    在这个“C++(Qt)下的thrift的使用示例”中,我们将探讨如何在Qt项目中集成和使用Thrift。 首先,Thrift的主要功能是定义服务接口和数据结构,这些定义会被编译成各种目标语言的代码,以便于实现客户端和服务器端...

    通过thrift使用c++访问hbase

    【标题】: "通过Thrift使用C++访问HBase" 【描述】: "本文档详述了如何在Linux和Windows环境下配置Thrift环境并使用HBase的C++客户端。" 【标签】: "hadoop hbase thrift boost" 在IT领域,特别是大数据处理中,...

    thrift的使用介绍

    一旦有了IDL文件,你可以使用Thrift编译器生成对应语言的客户端和服务器端代码。例如,对于PHP和Python,这将生成服务接口类、协议处理类以及数据结构的序列化和反序列化代码。 - `PhpClient.php`: 这是生成的PHP...

    Apache Thrift 使用说明

    对于 Java 示例,首先同样使用 `thrift` 生成 Java 代码,然后进入 `gen-java` 文件夹,如果尚未安装 ant,可以使用 `sudo apt-get install ant` 来安装。使用 ant 来编译 Java 代码,并运行生成的可执行文件,同样...

    Windows下QT使用Thrift的样例

    在Windows环境下,使用QT结合Thrift进行开发是一项常见的任务,特别是在构建跨平台的服务或应用时。这个样例项目提供了一种方法,使开发者能够在QT环境中有效地利用Thrift框架。让我们详细了解一下这些技术以及如何...

    Thrift 使用

    1. IDL(Interface Definition Language):Thrift使用类似C++的语法来定义服务接口和数据结构,这被称为IDL文件。例如,你可以定义一个服务和它的方法,以及结构体(struct)来传递数据。 2. 生成代码:将IDL文件...

    Thrift使用示例代码

    在本示例中,我们将深入探讨Thrift的使用,通过具体的代码示例来帮助理解其工作原理。 首先,Thrift的使用流程通常包括以下几个步骤: 1. **定义服务接口**:在Thrift IDL(Interface Description Language)文件...

    使用wireshark抓取thrift协议接口调用

    - 调试:在开发和测试环境中,使用Wireshark抓取Thrift流量可以帮助定位接口调用的问题,如序列化错误、网络通信问题等。 - 监控:在生产环境中,定期抓取Thrift流量可监控服务的健康状况,及时发现潜在的性能瓶颈...

    thrift实现http协议案例

    通过运行这个测试工程,你可以了解如何将Thrift服务部署到支持HTTP的服务器上,如Tomcat或Jetty,以及如何使用HTTP客户端(如curl或浏览器)与之交互。 总结一下,Thrift实现HTTP协议的关键在于创建一个自定义...

    qt 实现thrift的一个例子

    在这个例子中,我们将探讨如何使用Qt来实现一个基于Thrift的C++客户端和服务端的RPC(远程过程调用)连接。 首先,Thrift IDL文件(.thrift)是整个服务的核心,它定义了服务接口和数据结构。例如,我们可能会有一...

    Thrift框架使用分享

    Apache Thrift是由Facebook开发并开源的远程服务调用框架,它能够实现...总之,Thrift作为一款性能优良、支持多语言的RPC框架,能够有效地解决分布式系统中服务调用的问题,适合构建复杂、高并发、大数据量的后端服务。

    java代码使用thrift2操作hbase示例

    在本文中,我们将深入探讨如何使用Java通过Thrift2接口操作HBase数据库。HBase是一个分布式、可扩展的大数据存储系统,它构建于Hadoop之上,支持实时读写。Thrift是一个轻量级的框架,用于跨语言服务开发,允许不同...

    使用thrift、websocket在javascript和cpp之间建立rpc调用

    使用thrift、websocket在javascript和c++之间建立rpc调用机制。 如果要使用js+html来写界面,cpp来写底层业务逻辑,这就非常有用了。 当然,如果底层不用cpp来写,也可以参考本代码的js对thrift的rpc包装。

    thrift win7 安装与使用

    ### Thrift在Windows环境下安装与使用详解 #### 一、Thrift简介 Thrift是由Facebook开发的一款跨语言的服务开发框架,旨在支持可扩展的跨平台服务。它通过定义一套简单的数据类型和接口来描述服务,然后自动生成所...

    windows环境下thrift.exe的使用

    下面我们将详细介绍Thrift.exe的安装、使用以及相关的开发过程。 首先,我们需要获取Thrift的执行文件。在这个例子中,我们有两个版本的Thrift:thrift-0.9.0.exe和thrift-0.8.0.tar.gz。`.exe`文件是Windows下的可...

    虚拟机Centos安装thrift

    首先,需要从thrift的官方网站获取thrift的安装包,或者使用镜像站点提供的下载地址。在这个例子中,我们使用的是HUST镜像站点下载的thrift 0.11.0版本的压缩包。 2. 上传安装包到虚拟机 将下载好的thrift安装包...

    thrift官方代码+与dubbo集成支持原生thrift协议

    Thrift的编译器负责将IDL文件转换为实际的代码,而SDK则提供了在目标语言中使用Thrift接口的必要库和工具。 描述中提到的"与dubbo集成支持原生thrift协议"是指将Thrift与Dubbo框架结合使用。Dubbo是阿里巴巴开源的...

    Thrift-java学习小结

    Thrift使用一种高效的二进制协议进行通信,它支持多种传输方式,如TCP、HTTP等。这种协议设计考虑了网络通信的性能,包括数据序列化和反序列化,使得跨语言通信变得更加高效。 七、异常处理 Thrift支持自定义异常,...

    thrift安装

    Thrift是一种开源的跨语言服务开发框架,由Facebook于2007年开源,现在由Apache软件基金会维护。它的主要功能是定义数据结构和服务...通过理解Thrift的工作原理和安装过程,你可以更好地利用它来解决实际的开发问题。

    thrift-编译工具

    1. **IDL(接口定义语言)**:Thrift使用类似C++的语法定义服务接口和数据结构,这些定义存储在.thrift文件中。例如: ```thrift service MyService { string sayHello(1:string name) } ``` 2. **编译器**:Thrift...

Global site tag (gtag.js) - Google Analytics