如何更改gRPC';在Node.js实现中的重新连接行为?

如何更改gRPC';在Node.js实现中的重新连接行为?,node.js,grpc,Node.js,Grpc,据我所知,gRPC客户端会自动尝试使用回退算法重新建立丢失的连接。我的目标是让gRPC至少每秒尝试重新连接一次 使用Go实现,在第一次建立到服务的连接时,通过传递拨号选项,这是可能的。如何在Node.js实现中执行相同的操作 按照建议,我尝试将grpc.max\u reconnect\u backoff\u ms选项传递给客户端构造函数。如果我故意传递一个像-1这样的无效值,gRPC会记录一条错误消息,因此我相信我正确地使用了它 然而,该选项似乎不会影响gRPC的重新连接行为。相反,它似乎大约

据我所知,gRPC客户端会自动尝试使用回退算法重新建立丢失的连接。我的目标是让gRPC至少每秒尝试重新连接一次

使用Go实现,在第一次建立到服务的连接时,通过传递拨号选项,这是可能的。如何在Node.js实现中执行相同的操作


按照建议,我尝试将
grpc.max\u reconnect\u backoff\u ms
选项传递给客户端构造函数。如果我故意传递一个像-1这样的无效值,gRPC会记录一条错误消息,因此我相信我正确地使用了它

然而,该选项似乎不会影响gRPC的重新连接行为。相反,它似乎大约每隔20秒就尝试重新连接一次:

I0215 21:21:07.246695000 140736304567232 subchannel.c:694] Connect failed: {"created":"@1487190067.246665000","description":"Failed to connect to remote host","errno":61,"file":"../src/core/lib/iomgr/tcp_client_uv.c","file_line":104,"os_error":"connection refused"}
I0215 21:21:07.246910000 140736304567232 subchannel.c:491] Retry in 19.999536519 seconds

更令人困惑的是,gRPC似乎根本没有使用退避算法,即它总是使用~20s值。

节点gRPC客户端构造函数采用可选的第三个参数,其中包含用于底层实现的选项。其中一个选项是“grpc.max\u reconnect\u backoff\u ms”。顾名思义,该值以毫秒为单位,因此您应该将1000作为该值传递。

我也遇到了同样的问题,在调查了gRPC核心源代码(C)之后,我理解了这个问题:

  • 可以配置@murgatroid99所指出的最大时间,但是无法配置最小时间(强制为20秒)
我在gRPC存储库中提出了一个拉取请求,以使其可配置:

如果使用my fork的分支,则可以在客户端构造函数中执行此操作:

new ...client(host, credentials, {
  'grpc.min_reconnect_backoff_ms': 1000,
  'grpc.max_reconnect_backoff_ms': 10000,
})

谢谢你的快速回复!你的回答让我更进一步,但不幸的是,问题还没有解决。我已经用更多的信息更新了这个问题。@murgatroid99请看我的答案!