使用C ++从Protobuf复制字节以通过GRPC发送会产生错误

时间:2019-03-05 01:37:19

标签: c++ protocol-buffers grpc protobuf-c

我正在尝试将字节从C ++中的protobuf复制到GRPC函数调用中,并且不断出现错误。

message Foo {
    int32 value=1;
    bytes data=2;
}

在一些基础代码中,我将Foo创建为成员变量,然后返回Foo。

Foo SomeClass::DoSomething() {
    Foo fooTemp;
    fooTemp.set_value(5);
    fooTemp.set_data("Blah");
    return fooTemp;
}

然后在我的GRPC代码中,我有:

// rpc DoFoo(Params) returns (Foo){}
Status Server::CaptureImage( ServerContext* context, const Params* call, Foo* retVal ) {
    retVal->CopyFrom( SomeClass.DoSomething());
    return Status::OK;
}

我在GRPC的客户端收到未定义的错误。 CopyFrom不复制底层字节吗?我是否需要对他们自己进行深复制?我只是错过了一个应该起作用的功能吗?

如果我将GRPC服务器更改为直接设置数据,则Client错误消失了,我得到了值。

// rpc DoFoo(Params) returns (Foo){}
Status Server::CaptureImage( ServerContext* context, const Params* call, Foo* retVal ) {
    retVal->CopyFrom( SomeClass.DoSomething());
    retVal->set_data("Blah")
    return Status::OK;
}

这与Blah和5一起返回给客户端很好。是否有人对如何将protobuf相互复制有很好的示例代码?

0 个答案:

没有答案