我有一个用 C++ 编写的 Windows 异步 gRPC 服务器。我想检测与客户端的连接丢失 - 网络连接是否丢失,或者客户端崩溃等。我看到对 keepalive 通道参数的引用,并且我尝试了这些设置的各种组合,例如:
builder.AddChannelArgument(GRPC_ARG_KEEPALIVE_TIME_MS, 10000);
builder.AddChannelArgument(GRPC_ARG_KEEPALIVE_TIMEOUT_MS, 10000);
builder.AddChannelArgument(GRPC_ARG_KEEPALIVE_PERMIT_WITHOUT_CALLS, 1);
builder.AddChannelArgument(GRPC_ARG_HTTP2_MIN_RECV_PING_INTERVAL_WITHOUT_DATA_MS, 9000);
builder.AddChannelArgument(GRPC_ARG_HTTP2_BDP_PROBE, 1);
我已经使用流式 RPC 方法进行了一些测试。如果我终止客户端进程,然后尝试向客户端发送数据,则会检测到丢失的连接。我实际上甚至不需要发送数据。我可以将 Alarm 对象设置为立即触发,这会导致调用处理程序被取消。但是,如果我在终止客户端进程后不尝试发送数据(或设置警报),那么我无法找到/启用任何通知或回调。我一定没有完全了解。所以:
谢谢 - 如有任何帮助,我们将不胜感激。
当请求被取消时,您可以使用
ServerContext::AsyncNotifyWhenDone()
获取通知。
你解决这个问题了吗? 我必须解决同样的问题,但找不到解决方案。 如果您完成了,请告诉我您的解决方案。