在Keepalive失败的情况下如何获取服务器拦截器/回调?

时间:2020-01-29 16:28:49

标签: node.js grpc keep-alive grpc-node

我在nodejs中有一个GRPC服务器,它使用适当的keepalive选项管理客户端连接。

断开电缆连接后,服务器会正​​确检测到客户端不再可访问,如以下日志所示:

E0129 17:05:32.252261922    5591 chttp2_transport.cc:2838]   ipv4:127.0.0.1:47520: Keepalive watchdog fired. Closing transport.
I0129 17:05:32.252320289    5591 connectivity_state.cc:147]  SET: 0x47dd758 server_transport: READY --> SHUTDOWN [close_transport]

我找不到通过事件/回调/拦截器获取此信息的方法。

为此存在一些东西吗?

否则,如果高级代码无法检测到该keepalive在服务器端的用途是什么?

更新

尽管答案的真实真实令人沮丧,

我找到了解决方法

通过使用客户端流并在服务器端设置keepalive选项来

。在这种情况下,当发生连接问题时,keepalive会检测到它,并且流式调用会在该调用上触发一个“结束”事件。

1 个答案:

答案 0 :(得分:1)

编写gRPC库,以便服务器端应用程序代码处理请求,而不处理连接。它们不会出现任何表明已建立连接或丢失连接的事件。

keepalive选项仅影响客户端,其主要目的是通过在不活动期间通过在这些连接上发送HTTP / 2 ping来阻止服务器和代理杀死连接。即使设置了这些选项,由于任何原因,仍然可能会删除并重新建立连接。