如何解决在C ++ gRPC异步服务器中为丢失的连接提供了什么通知
我有一个用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对象设置为立即触发,并导致取消调用处理程序。但是,如果我在终止客户端进程后不尝试发送数据(或设置警报),那么就没有通知或回调,我已经能够找到/启用。我不能完全理解。所以:
- 对于服务器,丢失连接的检测如何表现出来?是否有回调方法或某种通知?我的服务器没有收到任何错误;完成队列的“ Next()”方法永不返回,依此类推。
- 这种检测对一元(呼叫/响应)方法和流方法都有效吗?
- 服务器是否检测到丢失的连接是否起作用,无论客户端是否实现了丢失的连接/保持活动逻辑?
- 除了keepalive通道参数之外还有其他方法吗?
谢谢-感谢您的帮助。
解决方法
取消请求后,您可以使用ServerContext::AsyncNotifyWhenDone()
接收通知。
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。