如何在c中添加元数据到流式grpc调用

如何在c中添加元数据到流式grpc调用,第1张

概述我正在尝试做类似下面的事情(即使用流式grpc调用从客户端向服务器发送数据).代码参考取自官方网站上给出的grpc示例,用于解释目的: 客户端代码: ClientContext context;context.AddMetadata("authorization", "abcd");context.set_deadline(...);std::unique_ptr<ClientWriter 我正在尝试做类似下面的事情(即使用流式grpc调用从客户端向服务器发送数据).代码参考取自官方网站上给出的grpc示例,用于解释目的:

客户端代码:

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调用所遇到的程序开发问题。

如果觉得内存溢出网站内容还不错,欢迎将内存溢出网站推荐给程序员好友。

欢迎分享,转载请注明来源:内存溢出

原文地址: http://outofmemory.cn/langs/1213701.html

(0)
打赏 微信扫一扫 微信扫一扫 支付宝扫一扫 支付宝扫一扫
上一篇 2022-06-04
下一篇 2022-06-04

发表评论

登录后才能评论

评论列表(0条)

保存