当前位置: 首页 > 知识库问答 >
问题:

在C++中如何在错误时中止gRPC流并指出错误

谷梁英毅
2023-03-14
    null

如果发生客户端错误,我将如何中止此序列,并向服务器指示这一点?

共有1个答案

顾磊
2023-03-14

您需要执行一个client_context.trycancel(),后跟一个Finish()。在https://github.com/grpc/grpc/blob/master/test/cpp/end2end/end2end_test.cc,ClientCancelsRequestStream中有一些例子。我对它进行了修改,使其看起来更接近您的代码。

RequestType request;
ResponseType response;
ClientContext context;
request.set_message("hello");

auto client_writer = stub_->YourRPC(&context, &response);
client_writer->Write(request);
client_writer->Write(request);

client_context.TryCancel();

Status s = client_writer->Finish();

如果取消成功,则s.error_code()==GRPC::StatusCode::Canceled。

以下是grpc存储库中client_context.h中clientContext::tryCancel()的注释:

/// Send a best-effort out-of-band cancel on the call associated with
/// this client context.  The call could be in any stage; e.g., if it is
/// already finished, it may still return success.
///
/// There is no guarantee the call will be cancelled.
 类似资料:
  • 在这个程序中,我必须打印1到100之间的素数。要遵循的方法是——要找出素数,用存储在数组中的前一个素数除以一个数。如果给定的数字在除以任何前一个素数时留下0作为余数,那么它就不是素数。如果不是,它就是一个素数,并将其添加到数组中。在程序中——我初始化了一个由100个数字组成的数组,并将1到100个数字存储在数组a中(步骤1)。是我将存储素数的数组。我在(步骤2)中存储了的前两个值。在(步骤3)中,

  • ***更新**** 所以首先我要尝试哈希。为了使其简短,我创建了一个linkedlsit类,它接受一个泛型参数。我有一个哈希表类,我试图在其中创建(我相信)一个linkedlist指针数组(请记住,linkedlist采用泛型类型) 因此,在我的哈希表类中,我有一个私有变量 其中SLL是我的链表,Entry是保存键(字符串)和值(int)的对象,并且绑定使其成为指针数组。 在哈希表构造函数中,我这

  • 我想从React客户端向服务器发送文件。我知道为此,我应该使用grpc流媒体并将文件分割成块。所以,问题是如何将这些块发送到服务器?

  • 在文件名中使用字符串变量作为当前时间时,创建文件时出错。错误为 “System”类型的未处理异常。mscorlib中出现NotSupportedException。dll 附加信息:不支持给定路径的格式。 我找不到代码中的错误,我尝试没有“路径”变量它会成功运行。当我使用“cTime”变量创建动态文件名时,我不明白发生了什么。

  • 我面临的情况是,我们不能使用模式来验证传入请求(基本上模式是存在的,但它接受请求中的任何字符串,wsdl设计人员有自己的理由这样做,以接受来自不同来源的请求和灵活性)。但是当收到请求时,我会验证请求包装器的子元素是我们所期望的(为此使用XPath)。现在,如果子元素不是预期的,我想抛出和代码,并且可能包含模式验证失败、请求不包含有效元素的错误消息。 我正在使用Mule3.3,并在元素中执行验证,我

  • 问题内容: 在Visual Studio中将selenium更新为3.0,将Firefox更新为47.0,现在当我尝试使用本地webdriver模式时出现此错误:geckodriver.exe文件在当前目录中或PATH环境变量的目录中不存在。 当我使用远程模式(seleniumhub)时,即使它使用了firefox 45.0版本,它也能正常工作。 试图搜索一些示例,但没有找到任何针对c#的内容,仅