我正在尝试将字节从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相互复制有很好的示例代码?