我正在使用 Grpc 的同步 C++ API 通过需要无限期保持打开状态的双向流发送消息。
现在,如果我拉服务器和客户端之间的电缆,该流上的 Write
和 Read
调用将在两侧阻塞大约 15 分钟,然后返回 假
。
如何将 Read
和 Write
的超时设置为小于 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/