ruby:thrift错误-预期协议id为-126,但得到60

ruby:thrift错误-预期协议id为-126,但得到60,ruby,thrift,Ruby,Thrift,我使用ruby 2.1.2对java服务进行压力测试,如下所示: (begin thread) url = "http://service.ops.net/api" transport = Thrift::HTTPClientTransport.new(url) protocol = Thrift::CompactProtocol.new(transport) client = MyService::Client.new(protocol) transport.open() client.&l

我使用ruby 2.1.2对java服务进行压力测试,如下所示:

(begin thread)
url = "http://service.ops.net/api"
transport = Thrift::HTTPClientTransport.new(url)
protocol = Thrift::CompactProtocol.new(transport)
client = MyService::Client.new(protocol)
transport.open()

client.<somefunctioncall>
(end thread)
这是通过混合使用有效和半有效参数来调用的。只要我只调用一个端点,这就行了。如果我一次线程化调用命中>1个端点(即从不同线程调用两个不同的函数),我会看到如下异常:

`read_message_begin':预期协议id为-126,但得到60(Thrift::ProtocolException)


我找不到一个合理的引用来了解这是什么意思。

消息告诉您,数据无法反序列化,因为它们看起来已损坏。然而,这并不意味着他们真的腐败了

出现这种情况的一个很可能的原因是客户端和服务器不使用完全相同的传输和协议栈

产生这种情况的一个典型错误是在一端使用
t框架传输
,而另一端不使用。Thrift Transports可能会向有线数据中添加(并期望)额外的数据,尤其是
TFramedTransport
通过添加包含帧大小的4字节报头来实现这一点


值得一提的是,某些服务器类型隐式地期望客户端使用
TFramedTransport
。因此,如果您检查了两端并比较了使用的协议和传输堆栈,这可能是另一个原因。

返回的消息有些随机。这意味着数据正在以一种非系统的方式被破坏?
(join thread)
(exit and begin next pass)