c++ - 在 Grpc 中使用双向流时如何检测(物理)断开连接

标签 c++ timeout grpc

我正在使用 Grpc 的同步 C++ API 通过需要无限期保持打开状态的双向流发送消息。

现在,如果我拉服务器和客户端之间的电缆,该流上的 WriteRead 调用将在两侧阻塞大约 15 分钟,然后返回

如何将 ReadWrite 的超时设置为小于 15 分钟?


我正在启动服务器:

ServerBuilder srvBuilder;

srvBuilder.AddChannelArgument(GRPC_ARG_KEEPALIVE_TIME_MS, 2000);
srvBuilder.AddChannelArgument(GRPC_ARG_KEEPALIVE_TIMEOUT_MS, 1000);
srvBuilder.AddChannelArgument(GRPC_ARG_HTTP2_BDP_PROBE, 1);
srvBuilder.AddChannelArgument(GRPC_ARG_MAX_CONNECTION_IDLE_MS , 1000);

srvBuilder.AddListeningPort("0.0.0.0:50505", grpc::InsecureServerCredentials());
srvBuilder.RegisterService(&testService);

在 Ubuntu 16.04 LTS 上使用 Grpc 1.10.0

最佳答案

您可以在调用前通过在 ClientContext 上调用 set_deadline 来设置 RPC 的截止日期。

更新 - 对于造成的误解,我深表歉意。 GRPC_ARG_KEEPALIVE_TIME_MS 正是您想要的。它未按预期工作的原因可能与您进行读写的方式有关。

关于c++ - 在 Grpc 中使用双向流时如何检测(物理)断开连接,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/49276298/

相关文章:

c++ - 与 boost::interprocess 共享映射

c++ - 接口(interface)->抽象->具体类设计中的虚解构函数

c++ - 设置 boost 并与 Visual Studio 2010 Express 一起使用

Python 网络抓取 : difference between sleep and request(page, 超时=x)

java - 当数据包未从服务器发送时,如何在 UDP 客户端中设置超时?

spring-boot - 如何正确传播gRPC错误Spring-boot

c++ - 文件.cpp :148: error: expected primary-expression before ‘.’ token DIFFERENT SYMBOL

bash - ntpd -qg : Use with timeout

go - 是否可以向 protobuf 服务添加自定义方法类型?

c++ - 实现 C++ grpc 异步客户端时如何轮询 CompletionQueue?