出于调试目的转储 apache thrift 消息?

Dump apache thrift messages for debugging purposes?

Apache Thrift 是开源 RPC 框架中更受欢迎的选择之一(gRPC 也是自公开发布以来获得大量关注的框架)。

在我的 Im using a TMultiplexedProcessor 设置中。我想这可能是任何 TProcessor 因为我只是对打印发送的任何内容感兴趣。

这有一个方法叫做:

  bool process(std::shared_ptr<protocol::TProtocol> in,
               std::shared_ptr<protocol::TProtocol> out,
               void* connectionContext) override {

我的想法是再次重写它,这样我就可以打印 in 参数 - 但我怎样才能将 TProtocol 写入输出? (乍一看,序列化成字符串好像不太直接)

我感觉可能还有其他或更简单的方法。所以我的问题是如何转储通过节俭收到的所有消息(用于调试目的)?

TProtocolTapTDebugProtocol

用法示例可以在thrift_dump.cpp:

中找到
  shared_ptr<TProtocol> iprot(new TBinaryProtocol(itrans));
  shared_ptr<TProtocol> oprot(
      new TDebugProtocol(
        shared_ptr<TTransport>(new TBufferedTransport(
          shared_ptr<TTransport>(new TFDTransport(STDOUT_FILENO))))));

  TProtocolTap tap(iprot, oprot);

 std::string name;
      TMessageType messageType;
      int32_t seqid;
      for (;;) {
        tap.readMessageBegin(name, messageType, seqid);
        tap.skip(T_STRUCT);
        tap.readMessageEnd();
      }