客户端代码:
ClIEntContext context;context.AddMetadata("authorization","abcd");context.set_deadline(...);std::unique_ptr<ClIEntWriter<RequestObjectClass>> writer(stub_->grpcCall(&context,&response));writer->WaitForInitialMetadata();// Setting request parametersrequest.set...(...);request.set...(...);request.set...(...);request.set...(...);if (!writer->Write(request)) { Status status = writer->Finish(); if (status.error_code() == UNAUTHENTICATED) { std::cout << "UNAUTHORIZED" << std::endl; break; } // broken stream. throw Exception("broken Stream");}writer->WritesDone();Status status = writer->Finish();if (status.ok()) { std::cout << "RPC succeeded." << std::endl;} else { std::cout << "RPC Failed." << std::endl;}
服务器端代码:
std::multimap<grpc::string_ref,grpc::string_ref> Metadata = context->clIEnt_Metadata();auto auth = Metadata.find("authorization");if (auth == Metadata.end()) { return Status(StatusCode::UNAUTHENTICATED,"UNAUTHORIZED");}
我得到“broken stream”异常,因为Status的代码为“DEADliNE_EXCEEDED”,详细信息为“Deadline Exceeded”. ClIEntContext的截止时间超时是system_clock :: Now()5秒.我究竟做错了什么?
解决方法 我刚刚删除了这一行“writer-> WaitForInitialMetadata();”它开始工作了.我认为这一行使客户端等待来自服务器的一些元数据.不过不确定. 总结以上是内存溢出为你收集整理的如何在c中添加元数据到流式grpc调用全部内容,希望文章能够帮你解决如何在c中添加元数据到流式grpc调用所遇到的程序开发问题。
如果觉得内存溢出网站内容还不错,欢迎将内存溢出网站推荐给程序员好友。
欢迎分享,转载请注明来源:内存溢出
评论列表(0条)