【问题标题】:How to use our own I/O framework inside a Thrift client?如何在 Thrift 客户端中使用我们自己的 I/O 框架?
【发布时间】:2015-08-13 01:22:06
【问题描述】:

在服务器端,一切正常。

但是在客户端,我们似乎不能只使用 Thrift 来处理协议,并使用我们自己的 I/O 框架(例如 muduo 或其他框架)发送/接收数据。

有什么方法可以用 C++ 来实现吗?

【问题讨论】:

  • 向我们展示一些代码,您尝试了什么,什么不起作用。提供自己的TTransport 实现就足够了
  • 感谢 cmets。是的,实现另一个 TTransport 可能有效,但这是否意味着我需要重建 thrift src?或者只是在外面实现我的lib,然后用thrift编译?当我从 Thrift 外部实现此功能时,我不确定 thrift 自动生成的代码是否还可以。无论如何,出于兼容性原因,我不想在 thrift src 中更改或添加代码。如果你知道一些开放的 src 实现了他们的 TTransport 而不会侵入 thrift src,只需使用接口和基类,请给我链接或任何其他提示,感谢!
  • 您可以实现自己的 TTransport 而无需触及 thrift src - 只需扩展基类并将其提供给客户端(例如,而不是 TSocket)。我很确定 thrift 源 (git-wip-us.apache.org/repos/…) 中的 contrib 目录包含一些额外传输的实现。 (例如 ZeroMq)
  • 非常感谢!我会先检查代码

标签: c++ thrift


【解决方案1】:

我认为这是一个合理的问题,并且可以扩展到更一般的问题:

如何在 Apache Thrift 中使用其他传输机制?

正如 Hcorg 所指出的,由于框架的模块化结构,实现这一点并不难。基本上,必须遵循这些步骤(Thrift 支持的所有语言都是如此,不仅是 C++)

  • 从 TTransport 派生一个专门的类。在某些情况下,这是一个接口,而不是基类,但这并不重要。
  • 实现所有methods needed
  • 对于服务器端,您可能需要一个TServerTransport 衍生产品

现有的实现可以作为模型,尽管TTransport 中有很多方法,但其中大多数并不难实现。

此外,我还基于TStreamTransport 提供了一个专门的传输实现,以将STOMP 与Delphi 结合使用。相关代码可以在/contrib Folder找到,值得一看。你知道,Thrift 的优点之一是它在所有语言中的工作方式都非常相似。

【讨论】:

  • 谢谢!实际上,我想实现一个处理连接管理和其他传输事物的节俭客户端框架。所以我学会了这样的过程: 1. 从 TTransport 派生一个专门的类,在其中实现我的逻辑,用 thrift src 编译为静态库 2. thrift IDL 部分没有变化,用户只需要知道我的专门传输类命名并在他的代码中使用它。 3. 用我的 lib 和 thrift src/lib 构建他的业务代码就是这样,对吧?我发现 thrift contrib 中的 ZeroMQ 示例非常简单明了,我正在阅读它
  • 基本上是的,就是这样。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2018-12-27
  • 1970-01-01
  • 2012-06-04
  • 1970-01-01
相关资源
最近更新 更多