这里有一个参考:
https://grpc.github.io/grpc/cpp/classgrpc__impl_1_1_client_context.html
https://grpc.github.io/grpc/cpp/classgrpc__impl_1_1_server_context.html
还有一个例子:
https://github.com/grpc/grpc/blob/master/examples/cpp/metadata/greeter_server.cc
客户端和服务器都可以指定初始元数据,分别在ClientContext和ServerContext上发送。该方法在ClientContext上称为AddMetadata,在ServerContext上称为AddInitialMetadata(以区别于尾随的元数据):
// AddMetadata (const grpc::string &meta_key,const grpc::string &meta_value)
context->AddMetadata("custom-server-metadata","initial metadata value");
在这种情况下,值是一个字符串。要指定数字,通常会使用grpc :: to_string:
context->AddInitialMetadata("filesize",grpc::to_string(file_size));
接收方的元数据格式为
const std::multimap< grpc::string_ref,grpc::string_ref > &
此类型由ServerContext :: client_metadata()返回(在服务器端获取客户端的初始元数据),并由ClientContext :: GetServerInitialMetadata()返回(在WaitForInitialMetadata()返回后在服务器端的服务器初始元数据)。同步API或其他API中的等效API。
要查找文件大小,可以执行以下操作:
int filesize = atoi(metadata.find("filesize")->second);
(如果不确定是否指定了“ filesize”,则可能要检查metadata.find(“ filesize”)!= metadata.end())
关于如何发送初始元数据,当您在网上发送RPC时,它会自动在客户端发送。在服务器端,您可以使用SendInitialMetadata()显式发送它,也可以将其与您的第一个服务器一起写入流中。
本文链接:https://www.f2er.com/3108083.html