【问题标题】:How to get server interceptor/callback in case of keepalive failure?在keepalive失败的情况下如何获取服务器拦截器/回调?
【发布时间】:2020-05-15 05:06:41
【问题描述】:

我在 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 会检测到它,并且流式呼叫会触发呼叫的“结束”事件。

【问题讨论】:

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


    【解决方案1】:

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

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

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2019-11-24
      相关资源
      最近更新 更多