Hi, we have a bidirectional java gRPC server & we are using NettyServerBuilder to configure the server. I have read all the docs in order to implement the ping/pong mechanism for the gRPC connection. Below is our server config
server code: ((NettyServerBuilder) serverBuilder) .executor(executor) //Allow client pings even if no ongoing calls are happening (default is false) .permitKeepAliveWithoutCalls(true) //Least keep alive time allowed for clients to configure .permitKeepAliveTime(10,TimeUnit.SECONDS) //How long a channel can stay idle (idle means no pings & messages received) .maxConnectionIdle(5,TimeUnit.SECONDS) //How long a channel can stay at all (even if not idle) .maxConnectionAge(1,TimeUnit.MINUTES) //Grace period after the channel ends .maxConnectionAgeGrace(10,TimeUnit.SECONDS) //Max payload size .maxInboundMessageSize(Integer.MAX_VALUE) //Max headers size .maxInboundMetadataSize(Integer.MAX_VALUE); } client code: ManagedChannel channel = ManagedChannelBuilder.forAddress("localhost", 50004) .usePlaintext() .keepAliveTime(30, TimeUnit.SECONDS) .keepAliveTimeout(5, TimeUnit.SECONDS) .keepAliveWithoutCalls(true) .build(); FabricGrpc.FabricStub stub = FabricGrpc.newStub(channel); Metadata headers = new Metadata(); headers.put(Metadata.Key.of("userId", Metadata.ASCII_STRING_MARSHALLER), identificationInputs[0]); FabricGrpc.FabricStub stubWithHeaders = MetadataUtils.attachHeaders(stub, headers); StreamObserver<Envelope> observer = stubWithHeaders.biDiEnvelopeChannel(new StreamObserver<Envelope>() { @Override public void onNext(Envelope value) { System.out.println("Received message =====> " + value + " ******* "); } @Override public void onError(Throwable t) { System.out.println("error on grpc client: " + t.getMessage()); } @Override public void onCompleted() { } }); what we need is if the connection is idle for a given time, the server should kill the connection. But I think I am not getting how *maxConnectionIdle *actually works. My previous thought was a connection is idle from the server's perspective if it does not get any message or ping, but then I read this line in the doc " Idleness duration is defined since the most recent time the number of outstanding RPCs became zero or the connection establishment" which I guess means that not any ongoing RPC calls should be there in order to consider a connection as idle. But since it's a bidirectional RPC call, it will be long-lived obviously. Right now maxConnectionAge is working fine, but how can we configure idle connection on a server with bidirectional RPC. Meaning if the server does not get a ping or any message in a given time frame, it will consider that connection as idle & will terminate it. -- You received this message because you are subscribed to the Google Groups "grpc.io" group. To unsubscribe from this group and stop receiving emails from it, send an email to grpc-io+unsubscr...@googlegroups.com. To view this discussion on the web visit https://groups.google.com/d/msgid/grpc-io/bd63e420-9147-4e81-b387-f17f1e8bf716n%40googlegroups.com.