回收Jetty Http2客户端流 - 最佳实践?

时间:2017-07-26 08:55:39

标签: jetty client http2

我们的Jetty Http2客户端大致构建为示例here

客户端处理的每个请求都会调用session.newStream(...)。似乎旧流不是GC编辑的。但是,我们似乎无法在API中找到回收它们或关闭它们的好方法。

我们应该使用streamPromise.get().setIdleTimeout(t)设置一个非常小的空闲超时吗?

我们应该保留Stream对象,在交换完成后标记它,然后重用它吗?但在这种情况下,我们还需要回收监听器,这使得状态良好。

有没有办法“关闭”Stream对象,或将其标记为GC?简单地将其设置为null似乎不是API-ish。

1 个答案:

答案 0 :(得分:0)

关闭的流 GCed。

Stream支持半关闭,因此为了关闭流,您需要发送一个设置了end_stream标志的帧,并接收一个带有end_stream标志的帧集。

如果你直接使用HTTP2Client,很可能你没有结束你身边的流(即你发送帧,但忘记在最后一帧设置end_stream标志发送),或服务器不结束流(这将是一个服务器错误)。

无论是哪种情况,在客户端上启用类别org.eclipse.jetty.http2的DEBUG日志记录都会告诉您框架是否设置了end_stream标志,并报告何时删除流 - 您只需要解析可能的大型日志文件。