ruby: thrift 错误 - 预期协议 ID -126 但得到 60
ruby: thrift error - expected protocol id -126 but got 60
我正在使用 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)
...
(join thread)
(exit and begin next pass)
这是通过混合有效和半有效参数调用的。只要我只调用一个端点,这就可以正常工作。如果我一次线程化调用 hit > 1 个端点(IE 从不同的线程调用两个不同的函数),我开始看到这样的异常:
`read_message_begin': Expected protocol id -126 but got 60 (Thrift::ProtocolException)
我找不到合理的参考资料来了解这在告诉我什么。
该消息告诉您数据无法反序列化,因为它们看起来已损坏。然而,这并不意味着它们真的被破坏了。
造成这种情况的一个很可能的原因是客户端和服务器不使用完全相同的传输和协议栈。
产生这种情况的一个典型错误是在一端使用 TFramedTransport
,而另一端不使用。 Thrift Transports 可能会向线路上的数据添加(并期望)其他数据,特别是 TFramedTransport
通过添加包含帧大小的 4 字节 header 来实现。
值得一提的是,某些服务器类型隐含地希望客户端使用 TFramedTransport
。所以如果你检查了两端并比较了使用的协议和传输堆栈,这可能是另一个原因。
我正在使用 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)
...
(join thread)
(exit and begin next pass)
这是通过混合有效和半有效参数调用的。只要我只调用一个端点,这就可以正常工作。如果我一次线程化调用 hit > 1 个端点(IE 从不同的线程调用两个不同的函数),我开始看到这样的异常:
`read_message_begin': Expected protocol id -126 but got 60 (Thrift::ProtocolException)
我找不到合理的参考资料来了解这在告诉我什么。
该消息告诉您数据无法反序列化,因为它们看起来已损坏。然而,这并不意味着它们真的被破坏了。
造成这种情况的一个很可能的原因是客户端和服务器不使用完全相同的传输和协议栈。
产生这种情况的一个典型错误是在一端使用 TFramedTransport
,而另一端不使用。 Thrift Transports 可能会向线路上的数据添加(并期望)其他数据,特别是 TFramedTransport
通过添加包含帧大小的 4 字节 header 来实现。
值得一提的是,某些服务器类型隐含地希望客户端使用 TFramedTransport
。所以如果你检查了两端并比较了使用的协议和传输堆栈,这可能是另一个原因。