代码之家  ›  专栏  ›  技术社区  ›  unludo

在keepalive失败的情况下,如何获取服务器侦听器/回调?

  •  0
  • unludo  · 技术社区  · 5 年前

    我在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会检测到它,流式调用会在调用中触发“结束”事件。

    0 回复  |  直到 4 年前
        1
  •  2
  •   murgatroid99 dhg    5 年前

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

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

    推荐文章