node.js - 在keepalive失败的情况下如何获取服务器拦截器/回调?
问题描述
我在 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 会检测到它,并且流式呼叫会触发呼叫的“结束”事件。
解决方案
编写 gRPC 库是为了让服务器端应用程序代码处理请求,而不是连接。它们不会显示任何表明连接已建立或丢失的事件。
keepalive 选项仅影响客户端,它们的主要目的是通过在这些连接上发送 HTTP/2 ping 来阻止服务器和代理在不活动期间终止连接。即使设置了这些选项,无论出于何种原因,连接仍可能会被删除并重新创建。
推荐阅读
- javascript - 提交表单后如何使用清除缓存硬刷新 Internet Explorer?
- php - 如何回显两个数字之间的间隔?
- javascript - 如何使用 django-push-notifications 实现 Web 客户端?
- javascript - 在React js中点击回车键触发onblur事件
- python - 如何从 else 语句重新启动我的代码?
- django - Django以特定数字开头的ID?
- magento - 如何使子菜单保持在顶部?
- javascript - 将 React Element 附加到正文的正确方法是什么?
- c# - 如何使用元组实现此代码?
- python - 如何在我的网页上使用我的数据框中的列名和唯一值生成动态选择字段?