1515
1616import java .util .HashMap ;
1717import java .util .Map ;
18+ import java .util .concurrent .TimeUnit ;
1819
1920import io .grpc .CallOptions ;
2021import io .grpc .ClientCall ;
@@ -33,6 +34,10 @@ public class GrpcModule extends ReactContextBaseJavaModule {
3334 private boolean withCompression = false ;
3435 private String compressorName = "" ;
3536 private Integer responseSizeLimit = null ;
37+ private boolean keepAliveEnabled = false ;
38+ private Integer keepAliveTime ;
39+ private Integer keepAliveTimeout ;
40+
3641 private ManagedChannel managedChannel = null ;
3742
3843 public GrpcModule (ReactApplicationContext context ) {
@@ -76,6 +81,12 @@ public void setResponseSizeLimit(int limit) {
7681 this .responseSizeLimit = limit ;
7782 }
7883
84+ public void setKeepalive (boolean enabled , int time , int timeout ) {
85+ this .keepAliveEnabled = enabled ;
86+ this .keepAliveTime = time ;
87+ this .keepAliveTimeout = timeout ;
88+ }
89+
7990 @ ReactMethod
8091 public void unaryCall (int id , String path , ReadableMap obj , ReadableMap headers , final Promise promise ) {
8192 ClientCall call = this .startGrpcCall (id , path , MethodDescriptor .MethodType .UNARY , headers );
@@ -300,6 +311,13 @@ private ManagedChannel getManagedChannel() {
300311 channelBuilder = channelBuilder .usePlaintext ();
301312 }
302313
314+ if (this .keepAliveEnabled ) {
315+ channelBuilder = channelBuilder
316+ .keepAliveWithoutCalls (true )
317+ .keepAliveTime (keepAliveTime , TimeUnit .SECONDS )
318+ .keepAliveTimeout (keepAliveTime , TimeUnit .SECONDS );
319+ }
320+
303321 managedChannel = channelBuilder .build ();
304322 return managedChannel ;
305323 }
0 commit comments