GRPC:客户端超时

2024-04-07

我正在尝试让客户端在超时的情况下工作。为此,我修改了 async_greeter_server.cpp 和 async_greeter_client.cpp 文件来测试这个概念。

我在客户端(在客户端上下文上)设置截止日期,如果超时,我会等待,直到收到来自服务器的实际(延迟)响应。以下是更改(在 Finish() 调用之后)。

同样,服务器端在延迟一段时间后发送响应,以在客户端产生超时。

由于 CallData cq_.Next() 循环“GPR_ASSERT(ok)”中的断言,服务器端崩溃。

客户端在添加的超时代码中永远等待实际响应。

知道这个程序有什么问题吗?

greeter_async_client.cc

std::string SayHello(const std::string& user) 
{
    // Data we are sending to the server.
    HelloRequest request;
    request.set_name(user);

    HelloReply reply;
    ClientContext context;
    CompletionQueue cq;
    Status status;

    std::chrono::system_clock::time_point deadline = std::chrono::system_clock::now() + std::chrono::seconds(10);
    context.set_deadline(deadline);

    std::unique_ptr<ClientAsyncResponseReader<HelloReply> > rpc(stub_->AsyncSayHello(&context, request, &cq));

    rpc->Finish(&reply, &status, (void*)1);
    void* got_tag;
    bool ok = false;

    GPR_ASSERT(cq.Next(&got_tag, &ok));
    GPR_ASSERT(got_tag == (void*)1);
    GPR_ASSERT(ok);

    // -------------- HANDLE TIMEOUT ------------------------------------------
    // If timeout error wait for the actual reply
    if (status.error_code() == grpc::StatusCode::DEADLINE_EXCEEDED)
    {
      std::cout << "Timeout exceeded .., waiting for the next event "<< status.error_message() << std::endl;

      GPR_ASSERT(cq.Next(&got_tag, &ok));
      GPR_ASSERT(got_tag == (void *) 1);
      GPR_ASSERT(ok);
    }
    // Act upon the status of the actual RPC.
    if (status.ok()) 
    {
      return reply.message();
    } 
    else 
    {
      return "RPC failed";
    }
}

greeter_async_server.cc

void Proceed() 
{
  if (status_ == CREATE) 
  {
    status_ = PROCESS;
    service_->RequestSayHello(&ctx_, &request_, &responder_, cq_, cq_,this);
  } 
  else if (status_ == PROCESS) 
  {
    new CallData(service_, cq_);

    std::string prefix("Hello ");
    reply_.set_message(prefix + request_.name());

    std::cout << "Sleeping for 20 seconds .... \n";
    std::this_thread::sleep_for(std::chrono::seconds(20));
    std::cout << "Out of sleep ..... \n";

    status_ = FINISH;
    responder_.Finish(reply_, Status::OK, this);
    std::cout <<" Reply sent - Finish ....... \n";
  } 
  else 
  {
    GPR_ASSERT(status_ == FINISH);
    // Once in the FINISH state, deallocate ourselves (CallData).
    delete this;
  }
}

在你的客户端,在你收到deadline_exceeded错误后,你不应该尝试再次获取标签1...标签只会从cq中出来一次。

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

GRPC:客户端超时 的相关文章

  • BASIC 中的 C 语言中的 PeekInt、PokeInt、Peek、Poke 等效项

    我想知道该命令的等效项是什么Peek and Poke 基本和其他变体 用 C 语言 类似PeekInt PokeInt 整数 涉及内存条的东西 我知道在 C 语言中有很多方法可以做到这一点 我正在尝试将基本程序移植到 C 语言 这只是使用
  • C# 异步等待澄清?

    我读了here http blog stephencleary com 2012 02 async and await html that 等待检查等待的看看它是否有already完全的 如果 可等待已经完成 那么该方法将继续 运行 同步
  • 没有特殊字符的密码验证器

    我是 RegEx 的新手 已经进行了大量搜索 但没有找到任何具体内容 我正在编写一个验证密码字符串的正则表达式 可接受的字符串必须至少具有 4 种字符类型中的 3 种 数字 小写字母 大写字母 特殊字符 我对包含有一个想法 也就是说 如果这
  • 如何从 Visual Studio 将视图导航到其控制器?

    问题是解决方案资源管理器上有 29 个项目 而且项目同时具有 ASP NET MVC 和 ASP NET Web 表单结构 在MVC部分中 Controller文件夹中有大约100个子文件夹 每个文件夹至少有3 4个控制器 视图完全位于不同
  • 如何连接重叠的圆圈?

    我想在视觉上连接两个重叠的圆圈 以便 becomes 我已经有部分圆的方法 但现在我需要知道每个圆的重叠角度有多大 但我不知道该怎么做 有人有主意吗 Phi ArcTan Sqrt 4 R 2 d 2 d HTH Edit 对于两个不同的半
  • ASP.NET Core 3.1登录后如何获取用户信息

    我试图在登录 ASP NET Core 3 1 后获取用户信息 如姓名 电子邮件 id 等信息 这是我在登录操作中的代码 var claims new List
  • 在 Unity 中实现 Fur with Shells 技术

    我正在尝试在 Unity 中实现皮毛贝壳技术 http developer download nvidia com SDK 10 5 direct3d Source Fur doc FurShellsAndFins pdf Fins 技术被
  • 使用 C# 中的 CsvHelper 将不同文化的 csv 解析为十进制

    C 中 CsvHelper 解析小数的问题 我创建了一个从 byte 而不是文件获取 csv 文件的类 并且它工作正常 public static List
  • WcfSvcHost 的跨域异常

    对于另一个跨域问题 我深表歉意 我一整天都在与这个问题作斗争 现在已经到了沸腾的地步 我有一个 Silverlight 应用程序项目 SLApp1 一个用于托管 Silverlight SLApp1 Web 的 Web 项目和 WCF 项目
  • 结构体的内存大小不同?

    为什么第一种情况不是12 测试环境 最新版本的 gcc 和 clang 64 位 Linux struct desc int parts int nr sizeof desc Output 16 struct desc int parts
  • C# - 当代表执行异步任务时,我仍然需要 System.Threading 吗?

    由于我可以使用委托执行异步操作 我怀疑在我的应用程序中使用 System Threading 的机会很小 是否存在我无法避免 System Threading 的基本情况 只是我正处于学习阶段 例子 class Program public
  • LINQ:使用 INNER JOIN、Group 和 SUM

    我正在尝试使用 LINQ 执行以下 SQL 最接近的是执行交叉联接和总和计算 我知道必须有更好的方法来编写它 所以我向堆栈团队寻求帮助 SELECT T1 Column1 T1 Column2 SUM T3 Column1 AS Amoun
  • 如何在当前 Visual Studio 主机内的 Visual Studio 扩展中调试使用 Roslyn 编译的代码?

    我有一个 Visual Studio 扩展 它使用 Roslyn 获取当前打开的解决方案中的项目 编译它并从中运行方法 程序员可以修改该项目 我已从当前 VisualStudioWorkspace 成功编译了 Visual Studio 扩
  • 使用特定参数从 SQL 数据库填充组合框

    我在使用参数从 sql server 获取特定值时遇到问题 任何人都可以解释一下为什么它在 winfom 上工作但在 wpf 上不起作用以及我如何修复它 我的代码 private void UpdateItems COMBOBOX1 Ite
  • 为什么C++代码执行速度比java慢?

    我最近用 Java 编写了一个计算密集型算法 然后将其翻译为 C 令我惊讶的是 C 的执行速度要慢得多 我现在已经编写了一个更短的 Java 测试程序和一个相应的 C 程序 见下文 我的原始代码具有大量数组访问功能 测试代码也是如此 C 的
  • 为什么 std::uint32_t 与 uint32_t 不同?

    我对 C 有点陌生 我有一个编码作业 很多文件已经完成 但我注意到 VS2012 似乎有以下语句的问题 typedef std uint32 t identifier 不过 似乎将其更改为 typedef uint32 t identifi
  • DotNetZip:如何提取文件,但忽略zip文件中的路径?

    尝试将文件提取到给定文件夹 忽略 zip 文件中的路径 但似乎没有办法 考虑到其中实现的所有其他好东西 这似乎是一个相当基本的要求 我缺少什么 代码是 using Ionic Zip ZipFile zf Ionic Zip ZipFile
  • 指针和内存范围

    我已经用 C 语言编程有一段时间了 但对 C 语言还是很陌生 有时我对 C 处理内存的方式感到困惑 考虑以下有效的 C 代码片段 const char string void where is this pointer variable l
  • 如何确定 CultureInfo 实例是否支持拉丁字符

    是否可以确定是否CultureInfo http msdn microsoft com en us library system globalization cultureinfo aspx我正在使用的实例是否基于拉丁字符集 我相信你可以使
  • 使用 WGL 创建现代 OpenGL 上下文?

    我正在尝试使用 Windows 函数创建 OpenGL 上下文 现代版本 基本上代码就是 创建窗口类 注册班级 创建一个窗口 choose PIXELFORMATDESCRIPTOR并设置它 创建旧版 OpenGL 上下文 使上下文成为当前

随机推荐

  • 如何只打开一个 fancybox 窗口(而不是 onclick)

    我正在触发 fancybox 打开onclick像这样 telefonosOtrosPaises fancybox type iframe href http es solmelia com nMenus jsp telefonosOtro
  • 使用 rust-cpython 从 Rust 并行运行 Python 代码

    我正在尝试使用 Rust 加速数据管道 该管道包含一些我不想修改的 Python 代码 因此我尝试使用 Rust 按原样运行它们rust cpython https docs rs cpython 0 4 1 cpython 和多线程 然而
  • 在 MVC5 中运行更新数据库时出错

    我有一个 MVC 5 应用程序 它的 MySQL 数据库托管在 Azure 中 它运行得很好 但是今天当我尝试输入 Update Database 并运行它时 我收到以下错误消息 System Runtime Serialization S
  • 如何在 Fossil 中闭合叶子

    The Fossil SCM 中的分支文档 http www fossil scm org index html doc tip www branching wiki表示如果叶子具有闭合标签 则该叶子被视为闭合 然而 当我进入 gt fos
  • 通过 jQuery Ajax 传递 PHP 数组

    我有一个 php 数组 toField explode ids Which looks something like 24 25 26 29 我想通过 jQuery AJAX 传递这个数组 如下所示
  • 将外语从csv文件导入到Stata

    我正在使用Stata 12 我遇到了以下问题 我正在使用以下命令将一堆 csv 文件导入到 Statainsheet命令 数据集可能包括俄语 克罗地亚语 土耳其语等 我认为它们是用 UTF 8 编码的 在 csv 文件中 它们是正确的 我把
  • ProGuard 混淆、java、Google Gson 和通用集合 - 如何保留成员?

    我有一堂这样的课 public class MyClass private Queue
  • 如何使用 KIF 框架模拟位置服务

    我使用KIF框架 http github com kif framework KIF http github com kif framework KIF 用于 UI 测试 我需要模拟位置服务 问题是位置服务在 KIF 方法 beforeAl
  • 选项卡面板中的 Vbox 布局问题

    我有一个问题vbox布局所以我创建了一个简单的例子 这说明了问题 这让我vbox布局到fit屏幕的高度 On the hbox屏幕上 视图看起来符合预期 然而 当我简单地改变hbox to vbox所有文本都覆盖在左上角 所有代码都在下面给
  • 如何在 Windows 脚本宿主中使用 jQuery?

    我正在编写一些需要解析大量包含 HTML 片段的文件的代码 看起来 jQuery 对此非常有用 但是当我尝试将 jQuery 加载到 WScript 或 CScript 之类的内容中时 由于 jQuery 对窗口对象的许多引用 它会抛出错误
  • 访问 Node JS Lambda 中的 AWS SSM 参数

    我能够在 NodeJS 中本地从 AWS SSM 参数存储中检索数据 但当我将代码移至 Lambda 时却无法检索数据 我搜索过 但没有找到很多使用 NodeJS 设置 Lambda 且不使用 无服务器 框架的示例 我知道我错过了一些简单的
  • Polymer + Dart2js 不工作

    当我使用 Polymer 库创建新应用程序时 它会生成一个示例项目 该项目在 Dartium 中运行得很好 但是当我编译它时 使用pub build 它不再起作用了 我收到两个 404 错误和一个未捕获的类型错误 这是我在 Chrome 中
  • 使用 JNI 链接静态库

    Java 8 之前的 Java 版本要求本机代码位于共享库中 但我读到 在 Java 8 中可以将静态链接库与 JNI 一起使用 我搜索过示例但找不到任何示例 如何将 JNI 库静态链接到我的 java 应用程序中 Java SE 8规范已
  • asp.net web 表单中的 ASP.Net 路由

    我正在为我的网站使用 ASP Net Web 表单路由 但我想让它更具结构性并使用适当的结构隐藏所有查询字符串 ID 例如Language Category PageName Title例子 www abc com en sports cr
  • 将图像保存到文件

    我正在开发一个基本的绘图应用程序 我希望用户能够保存图像的内容 我想我应该使用 System Drawing Drawing2D GraphicsState img drawRegion CreateGraphics Save 但这对我保存
  • GWT获取应用程序的路径

    我有一个 GWT 应用程序 当我在运行应用程序后部署本地主页时 其主页为 localhost 8888 myapp html 但当我们将其部署到服务器时 在应用程序运行后其主页为 107 20 239 198 8080 myapp myap
  • 如何使用 3rd 方 SDK 遵循 MVP 架构?

    我看过很多项目展示如何在 MVP 中实现登录 但找不到任何与 Google Facebook 登录相关的内容 当登录流程与Android组件生命周期强绑定时我们该怎么办 我看到 MVP 的主要好处是我们在上面构建了一个抽象Context 但
  • 如何在eclipse中添加sbteclipse插件

    我正在使用 sbt 0 13 我想添加 sbteclipse 插件 以便 eclipse 导入我的 sbt 项目 我可以轻松编写我的 scala 代码 在互联网上搜索时我得到了this https github com typesafehu
  • 我有两个带有相应值的 data.frame 索引向量(行、列),构建新 data.frame 的最快方法是什么?

    我有一个包含 3 列的数据框 df1 其中两个表示新 data frame df2 的索引 其余列包含应放置在 df2 中的值 如果我忽略了正确的答案 我很抱歉 df1 lt data frame row c 1 3 1 2 3 col c
  • GRPC:客户端超时

    我正在尝试让客户端在超时的情况下工作 为此 我修改了 async greeter server cpp 和 async greeter client cpp 文件来测试这个概念 我在客户端 在客户端上下文上 设置截止日期 如果超时 我会等待