为 C++ gRPC 异步服务器中丢失的连接提供什么通知

问题描述 投票:0回答:2

我有一个用 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 对象设置为立即触发,这会导致调用处理程序被取消。但是,如果我在终止客户端进程后不尝试发送数据(或设置警报),那么我无法找到/启用任何通知或回调。我一定没有完全了解。所以:

  1. 服务器如何检测到丢失连接?是否有回调方法或某种类型的通知?我的服务器没有收到任何错误;完成队列的‘Next()’方法永远不会返回,等等
  2. 此检测是否适用于一元(调用/响应)和流方法?
  3. 无论客户端是否实现了丢失连接/保活逻辑,服务器对丢失连接的检测是否有效?
  4. 除了 keepalive 通道参数之外,还有其他首选方法吗?

谢谢 - 如有任何帮助,我们将不胜感激。

c++ windows asynchronous grpc keep-alive
2个回答
0
投票

当请求被取消时,您可以使用

ServerContext::AsyncNotifyWhenDone()
获取通知。

https://grpc.github.io/grpc/cpp/classgrpc__impl_1_1_server_context_base.html#a0f1289f31257e6dbef57bc901bd7b5f2


0
投票

你解决这个问题了吗? 我必须解决同样的问题,但找不到解决方案。 如果您完成了,请告诉我您的解决方案。

© www.soinside.com 2019 - 2024. All rights reserved.