8

我有三个问题。

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

谢谢!

4

2 回答 2

3

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

在回答您的问题时:

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

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

  3. 我的建议:仅使用内存传输并建立自己的网络。Thrift 所做的可能不是您想要做的,即使是,他们的文档和包装也很糟糕。(或者使用协议缓冲区而不是 thrift ——这些天它们在 IMO 中得到了更好的维护。我认为这即使我是一个 thrift 贡献者。)

于 2012-11-28T02:31:17.933 回答
1

节俭 0.12。

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

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

定义一个 ExampleService (example.thrift) 你应该有:

class ExampleServiceConcurrentClient : virtual public ExampleServiceIf {
}
  1. 他们在 Thrift 上有某种连接池吗? 您可以为每个线程建立自己的连接,也可以为所有线程使用 connectionConcurrentClient,这取决于您。
  2. 任何使用 thrift-cpp-client 的好习惯。可能在每次服务调用时至少捕获 apache::thrift:: TException
于 2019-06-05T07:27:46.447 回答