我們有一個大致如示例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