We're trying to keep connections alive between Ruby grpc clients and a grpc-java server between unary rpc calls, which sometimes come minutes apart. Based on
https://github.com/grpc/proposal/blob/master/A8-client-side-keepalive.md, we think this should be supported with periodic PINGs to ensure a connection is still good. (Without the changes described below, our connections sometimes seem to die without the client realizing it, resulting in "14:Connect Failed" on the next call. This happens especially often when the next call comes very close to the server's maxConnectionIdle time after the previous call.)
On the Ruby client side, we've configured the following.
"grpc.keepalive_permit_without_calls" => 1,
"grpc.keepalive_time_ms" => 11_000,
On the Java server side, we've configured the following (NettyServerBuilder calls).
.permitKeepAliveWithoutCalls(true)
.permitKeepAliveTime(10, TimeUnit.SECONDS)
In testing this with debug logging on the server, we see an INBOUND PING 11 seconds after the first call (followed immediately by an OUTBOUND ack). Then after another 11 seconds we see an INBOUND SETTINGS (followed by an outbound ack). Then we see no more pings. We expected to see PINGs every 11 seconds.
Is there configuration we're missing to get periodic PINGs between rpc calls? Have we misunderstood the feature?