我们有一个大致如示例here构建的Jetty Http2客户端。回收Jetty Http2客户端流 - 最佳实践?
客户端处理的每个请求调用session.newStream(...)
。看起来老流不是GC-ed。但是,我们似乎无法在API中找到一种好方法来回收它们或关闭它们。
我们是否应该使用streamPromise.get().setIdleTimeout(t)
来设置非常小的空闲超时?
我们是否应该保留Stream对象,在交换完成时标记它,然后重用它?在这种情况下,我们也需要回收监听器,这是有状态的。
有没有办法“关闭”Stream对象,或者将它标记为GC?简单地将它设置为null似乎不是API-ISH。
我们所有的请求都是'end_stream',它们是这样构造的:'HeadersFrame headersFrame = new HeadersFrame(request,null,true);'。另外,我们的业务逻辑以'@Override public void onData(Stream stream,DataFrame frame,Callback dataCallback){if(frame.isEndStream()){...')结束。该流在当时是否被认为是封闭的? – Deroude
您*必须*完成数据回调。如果上面显示的'onData()'在客户端上,那么流是关闭的,在调用'onData()'之前它已经被移除。 – sbordet