thrift数据类型不同引起的传输问题

10 篇文章 0 订阅

最近修改了一个模块的接收,数据传输类型由原来的struct改为了string,测试中接收端出现异常而退出(实际上并非由接收引起,而是由于反序列化未捕捉异常引起),特此总结一下。以下用到的struct只用来说明问题。

(1)接收端调用bool Send(const string& s),而发送端调用bool Send(const Student& s)

如果发送端不是Send,则会抛出异常:没有这个函数。

而当二者同为Send(函数名一样)时,不会异常,并且发送和接收均成功

而这时接收端并没有发觉,继续处理后面的事情。后面的代码大致是这样的:先将string push到一个并发队列中,然后由其他线程处理并发队列中的数据,处理的第1件事情就是对string进行反序列化。反序列化时未捕获异常,导致程序core dump退出。原因很简单:string数据为空。

解决这个问题,要么捕获异常,要么在接收端加上判断,当string大小为0时返回失败。

(2)当然将string发送给一个接收Student的接收端同样成功,接收到的数据同样为空。这时可以在struct中约定一个必填字段,如果该字段为空则返回false。

(3)如果将struct1发往struct2的接收端,则会出现数据解析错误:No more data to read.

等同字段修改,可以参考:关于thrift字段修改的问题


  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 1
    评论
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值