是thrift-cpp线程安全的客户端吗?

时间:2012-06-07 06:19:38

标签: c++ multithreading thrift

我有三个问题。

  1. 是thrift-cpp线程安全的客户端吗?
  2. 他们在节俭上有某种连接池吗?
  3. 使用thrift-cpp-client的任何好习惯。
  4. 谢谢!

2 个答案:

答案 0 :(得分:2)

Thrift有doxygen docs,但它们似乎没有建成。他们不是很漂亮。要生成副本,请运行(在thrift源目录中)doxygen -g Doxyfile,将RECURSIVE更改为YES,然后运行doxygen Doxyfile

回答你的问题:

  1. 哪个客户?有一大堆不同的节俭运输。通常,没有(AFAICT)任何全局状态,因此您可以在不同的线程中创建不同的客户端。如果你试图在多个线程中使用相同的传输,你可能需要手动锁定,除非你已经阅读了代码并确认它没问题。

  2. 我还没见过一个。 AFAICT只有一堆你可以自己连接的传输。有TSocketPool,但这是一个负载平衡工具,这不是我认为你正在寻找的。

  3. 我的建议:只使用内存传输并进行自己的网络连接。什么Thrift可能不是你想要做的,即使它是,他们的文档和包装是非常糟糕的。 (或者使用协议缓冲而不是节俭 - 这些天他们的IMO得到了更好的维护。我认为即使我是一个节俭的贡献者,但是。)

答案 1 :(得分:0)

节俭0.12。

  1. thrift-cpp的客户端线程安全吗? 这是来自Thrift Compiler(0.12.0)的.h / .cpp自动生成的文件。
  

“并发”客户端是线程安全客户端,可以正确处理乱序响应。它比常规客户端要慢,因此仅在需要在多个线程之间共享连接时才使用

定义ExampleService(example.thrift)应该具有:

class ExampleServiceConcurrentClient : virtual public ExampleServiceIf {
}
  1. 他们节俭地拥有某种连接池吗? 您可以为每个线程建立自己的连接,也可以为所有线程使用connectionConcurrentClient,这取决于您。
  2. 使用thrift-cpp-client的任何好的做法。 MAYBE 在每个服务调用中至少捕获apache :: thrift :: TException