我们项目的各个server之间是使用thrift rpc库来互相rpc的,我们使用的版本是0.9.2, 我制定了统一的消息格式,控制和包装好整个rpc的使用方法,来方便我们服务端的开发人员来使用,一开始因为rpc的数据量很少,所以基本没啥问题, 最近项目有一个大的rpc数据,开发反映rpc库报错,报错如下(用测试的demo工程来再现):
是typeid_to_atom()的参数匹配‘:'出了错,这就奇怪了,减少rpc数据请求量,又正常,在确认使用方法没有问题后,想到的是rpc参数是不是有哪个默认参数有问题,开始想到buffer不够大,去看buffer大小的限制,发现是一个list,这样就没有限制,排除这个原因。 再怀疑是recv timeout太短,默认是60秒,也排除。其它每一个参数都认真检查发现都没问题,这就怪了,这算是一个比较出名的库,应该不会代码有这么明显示的bug没测出来吧,参数反复检查没问题后,只能硬着头皮去看库的代码,花了一天时间,梳理了代码,整条线基本是这样:thrift_client:receive_function_result --> read_result --> handle_reply -->