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吧
多沟通,闭门造车也许可能,但绝对浪费时间
同时让我们继续纠结吧。。。。
分享到:
相关推荐
在这个“C++(Qt)下的thrift的使用示例”中,我们将探讨如何在Qt项目中集成和使用Thrift。 首先,Thrift的主要功能是定义服务接口和数据结构,这些定义会被编译成各种目标语言的代码,以便于实现客户端和服务器端...
【标题】: "通过Thrift使用C++访问HBase" 【描述】: "本文档详述了如何在Linux和Windows环境下配置Thrift环境并使用HBase的C++客户端。" 【标签】: "hadoop hbase thrift boost" 在IT领域,特别是大数据处理中,...
一旦有了IDL文件,你可以使用Thrift编译器生成对应语言的客户端和服务器端代码。例如,对于PHP和Python,这将生成服务接口类、协议处理类以及数据结构的序列化和反序列化代码。 - `PhpClient.php`: 这是生成的PHP...
对于 Java 示例,首先同样使用 `thrift` 生成 Java 代码,然后进入 `gen-java` 文件夹,如果尚未安装 ant,可以使用 `sudo apt-get install ant` 来安装。使用 ant 来编译 Java 代码,并运行生成的可执行文件,同样...
在Windows环境下,使用QT结合Thrift进行开发是一项常见的任务,特别是在构建跨平台的服务或应用时。这个样例项目提供了一种方法,使开发者能够在QT环境中有效地利用Thrift框架。让我们详细了解一下这些技术以及如何...
1. IDL(Interface Definition Language):Thrift使用类似C++的语法来定义服务接口和数据结构,这被称为IDL文件。例如,你可以定义一个服务和它的方法,以及结构体(struct)来传递数据。 2. 生成代码:将IDL文件...
在本示例中,我们将深入探讨Thrift的使用,通过具体的代码示例来帮助理解其工作原理。 首先,Thrift的使用流程通常包括以下几个步骤: 1. **定义服务接口**:在Thrift IDL(Interface Description Language)文件...
- 调试:在开发和测试环境中,使用Wireshark抓取Thrift流量可以帮助定位接口调用的问题,如序列化错误、网络通信问题等。 - 监控:在生产环境中,定期抓取Thrift流量可监控服务的健康状况,及时发现潜在的性能瓶颈...
通过运行这个测试工程,你可以了解如何将Thrift服务部署到支持HTTP的服务器上,如Tomcat或Jetty,以及如何使用HTTP客户端(如curl或浏览器)与之交互。 总结一下,Thrift实现HTTP协议的关键在于创建一个自定义...
在这个例子中,我们将探讨如何使用Qt来实现一个基于Thrift的C++客户端和服务端的RPC(远程过程调用)连接。 首先,Thrift IDL文件(.thrift)是整个服务的核心,它定义了服务接口和数据结构。例如,我们可能会有一...
Apache Thrift是由Facebook开发并开源的远程服务调用框架,它能够实现...总之,Thrift作为一款性能优良、支持多语言的RPC框架,能够有效地解决分布式系统中服务调用的问题,适合构建复杂、高并发、大数据量的后端服务。
在本文中,我们将深入探讨如何使用Java通过Thrift2接口操作HBase数据库。HBase是一个分布式、可扩展的大数据存储系统,它构建于Hadoop之上,支持实时读写。Thrift是一个轻量级的框架,用于跨语言服务开发,允许不同...
使用thrift、websocket在javascript和c++之间建立rpc调用机制。 如果要使用js+html来写界面,cpp来写底层业务逻辑,这就非常有用了。 当然,如果底层不用cpp来写,也可以参考本代码的js对thrift的rpc包装。
### Thrift在Windows环境下安装与使用详解 #### 一、Thrift简介 Thrift是由Facebook开发的一款跨语言的服务开发框架,旨在支持可扩展的跨平台服务。它通过定义一套简单的数据类型和接口来描述服务,然后自动生成所...
下面我们将详细介绍Thrift.exe的安装、使用以及相关的开发过程。 首先,我们需要获取Thrift的执行文件。在这个例子中,我们有两个版本的Thrift:thrift-0.9.0.exe和thrift-0.8.0.tar.gz。`.exe`文件是Windows下的可...
首先,需要从thrift的官方网站获取thrift的安装包,或者使用镜像站点提供的下载地址。在这个例子中,我们使用的是HUST镜像站点下载的thrift 0.11.0版本的压缩包。 2. 上传安装包到虚拟机 将下载好的thrift安装包...
Thrift的编译器负责将IDL文件转换为实际的代码,而SDK则提供了在目标语言中使用Thrift接口的必要库和工具。 描述中提到的"与dubbo集成支持原生thrift协议"是指将Thrift与Dubbo框架结合使用。Dubbo是阿里巴巴开源的...
Thrift使用一种高效的二进制协议进行通信,它支持多种传输方式,如TCP、HTTP等。这种协议设计考虑了网络通信的性能,包括数据序列化和反序列化,使得跨语言通信变得更加高效。 七、异常处理 Thrift支持自定义异常,...
Thrift是一种开源的跨语言服务开发框架,由Facebook于2007年开源,现在由Apache软件基金会维护。它的主要功能是定义数据结构和服务...通过理解Thrift的工作原理和安装过程,你可以更好地利用它来解决实际的开发问题。
1. **IDL(接口定义语言)**:Thrift使用类似C++的语法定义服务接口和数据结构,这些定义存储在.thrift文件中。例如: ```thrift service MyService { string sayHello(1:string name) } ``` 2. **编译器**:Thrift...