如何在保活失败的情况下获取服务器interceptor/callback?
How to get server interceptor/callback in case of keepalive failure?
我在 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]
我找不到通过 event/callback/interceptor 获取此信息的方法。
有这方面的东西吗?
否则,如果高级代码无法检测到它,那么在服务器端使用这个 keepalive 有什么用?
更新
尽管答案令人悲伤,但
我找到了解决方法
通过使用客户端流式传输并在服务器端设置保持活动选项。在这种情况下,当发生连接问题时,keepalive 会检测到它并且流式调用会在调用中触发 'end' 事件。
编写 gRPC 库是为了让服务器端应用程序代码处理请求,而不是连接。它们不会显示任何表明连接已建立或丢失的事件。
keepalive 选项只影响客户端,它们的主要目的是通过在这些连接上发送 HTTP/2 ping 来阻止服务器和代理在不活动期间终止连接。即使设置了这些选项,连接仍可能出于任何原因被删除并重新创建。
我在 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]
我找不到通过 event/callback/interceptor 获取此信息的方法。
有这方面的东西吗?
否则,如果高级代码无法检测到它,那么在服务器端使用这个 keepalive 有什么用?
更新
尽管答案令人悲伤,但
我找到了解决方法
通过使用客户端流式传输并在服务器端设置保持活动选项。在这种情况下,当发生连接问题时,keepalive 会检测到它并且流式调用会在调用中触发 'end' 事件。
编写 gRPC 库是为了让服务器端应用程序代码处理请求,而不是连接。它们不会显示任何表明连接已建立或丢失的事件。
keepalive 选项只影响客户端,它们的主要目的是通过在这些连接上发送 HTTP/2 ping 来阻止服务器和代理在不活动期间终止连接。即使设置了这些选项,连接仍可能出于任何原因被删除并重新创建。