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吧

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

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

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值