http - x/net/http2:ConnState 无法跟踪
问题描述
net/http
SDK中的包Server
结构有ConnState func(net.Conn, ConnState)
,但在'x/net/http2'的'Server'结构中不存在
有了这个h2c
特性,当状态变量转换为 时http.StateHijacked
,我将不再知道连接的后续状态。
我希望能够跟踪这个 TCP 连接的状态,直到它关闭。
有没有这样的功能或灵活的解决方案?谢谢
解决方案
您不应在生产中使用此代码。
从 x/net/http2:
这是一个正在进行中的 Go 的 HTTP/2 实现。
对于您的 h2c 支持,有以下信息:
ServeConn 在提供的连接上提供 HTTP/2 请求并阻塞,直到连接不再可读。
ServeConn 假设 c 没有任何读取或写入,开始使用 HTTP/2。它写入其初始设置框架并期望能够从客户端读取前言和设置框架。如果 c 具有像 *tls.Conn 这样的 ConnectionState 方法,则 ConnectionState 用于验证 TLS 密码套件并设置 Handlers 中的 Request.TLS 字段。
ServeConn 本身不支持 h2c。任何 h2c 支持都必须根据提供适当行为的 net.Conn 来实施。
HTTP/2 不支持 H2C,他们削减支持的技术原因很少。您可以在以下堆栈线程中找到更多信息:为什么 Web 浏览器不支持 h2c(没有 TLS 的 HTTP/2)?
你不应该知道连接状态,你应该依赖语言库。如果您需要检查连接是否可以接受新连接,这里有功能:https ://pkg.go.dev/golang.org/x/net/http2#ClientConn.CanTakeNewRequest
只是为了了解更多上下文,我有一个问题:为什么需要知道应用程序中的连接状态?这是一个应该从您的应用程序中隐藏的逻辑。
推荐阅读
- typo3 - 使用 TYPO3 10.x 创建 TYPO3 后端模块组
- python - python pandas cumsum 与 groupby 和条件
- c - 在c中计算字符串中的特定单词
- oracle - 使用 Types.TIME 将 java.time.LocalTime 持久化到 oracle 中会丢失小数秒精度
- python - 仅裁剪白色像素
- java - JsonArrayRequest 无法将 JSONArray 从我的 API 解析到 Android
- visual-studio - MSVC 2019:遗留库中的 libc 外部未解决
- python - 了解 Python 中多处理和线程之间的关键区别
- r - 当我在其中添加世界地图代码时,Flex Dashboard 无法正常工作
- javascript - 更干净的 Promise.all 语法?