Skip to content

Commit b5d96a1

Browse files
committed
Make keepalive configurable
1 parent c96e60e commit b5d96a1

3 files changed

Lines changed: 33 additions & 0 deletions

File tree

ios/Grpc.m

Lines changed: 6 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -17,6 +17,12 @@ @interface RCT_EXTERN_MODULE(Grpc, RCTEventEmitter)
1717
compressorName: (NSString *) compressorName
1818
limit: (NSString *) limit)
1919

20+
RCT_EXTERN_METHOD(setKeepalive:
21+
(nonnull NSNumber *) enabled
22+
time: (nonnull NSNumber *) time
23+
timeout: (nonnull NSNumber *) timeout
24+
)
25+
2026
RCT_EXTERN_METHOD(getIsInsecure:
2127
(RCTPromiseResolveBlock) resolve reject:
2228
(RCTPromiseRejectBlock) reject)

ios/RNGrpc.swift

Lines changed: 23 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -22,6 +22,9 @@ class RNGrpc: RCTEventEmitter {
2222
var grpcCompression: Bool?
2323
var grpcCompressorName: String?
2424
var grpcCompressionLimit: Int?
25+
var grpcKeepaliveEnabled: Bool?
26+
var grpcKeepaliveTime: Int64?
27+
var grpcKeepaliveTimeout: Int64?
2528
var calls = [Int: GrpcCall]()
2629

2730
deinit {
@@ -44,6 +47,12 @@ class RNGrpc: RCTEventEmitter {
4447
self.grpcCompression = enabled.boolValue
4548
self.grpcCompressorName = compressorName
4649
self.grpcCompressionLimit = Int(limit ?? "")
50+
51+
@objc
52+
public func setKeepalive(_ enabled: NSNumber, time: NSNumber, timeout: NSNumber) {
53+
self.grpcKeepaliveEnabled = enabled.boolValue
54+
self.grpcKeepaliveTime = time.int64Value
55+
self.grpcKeepaliveTimeout = timeout.int64Value
4756
}
4857

4958
@objc
@@ -361,6 +370,20 @@ class RNGrpc: RCTEventEmitter {
361370
config.maximumReceiveMessageLength = maxReceiveSize
362371
}
363372

373+
if let enabled = grpcKeepaliveEnabled, enabled {
374+
let interval = self.grpcKeepaliveTime != nil ? TimeAmount.seconds(self.grpcKeepaliveTime!) : TimeAmount.nanoseconds(.max)
375+
376+
let timeout = TimeAmount.seconds(grpcKeepaliveTimeout ?? 20)
377+
378+
let keepalive = ClientConnectionKeepalive(
379+
interval: interval,
380+
timeout: timeout,
381+
permitWithoutCalls: true
382+
)
383+
384+
config.keepalive = keepalive
385+
}
386+
364387
return try? GRPCChannelPool.with(configuration: config)
365388
}
366389

src/client.ts

Lines changed: 4 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -19,6 +19,7 @@ type GrpcType = {
1919
setHost(host: string): void;
2020
setInsecure(insecure: boolean): void;
2121
setCompression(enable: boolean, compressorName: string, limit?: string): void;
22+
setKeepalive(enabled: boolean, time: number, timeout: number): void;
2223
setResponseSizeLimit(limitInBytes: number): void;
2324
unaryCall(
2425
id: number,
@@ -181,6 +182,9 @@ export class GrpcClient {
181182
): void {
182183
Grpc.setCompression(enable, compressorName, limit?.toString());
183184
}
185+
setKeepalive(enabled: boolean, time: number, timeout: number): void {
186+
Grpc.setKeepalive(enabled, time, timeout);
187+
}
184188
setResponseSizeLimit(limitInBytes: number): void {
185189
Grpc.setResponseSizeLimit(limitInBytes);
186190
}

0 commit comments

Comments
 (0)