[英]Http Server - Are Netty FileRegions reusable?
我目前正在使用http服務器,有些事情表現得有些奇怪。 我想生成動態內容,還只提供靜態文件。 提供動態生成的內容可以正常工作。 因為我想從零拷貝中獲利,所以我使用FileRegions來提供靜態文件。 我的頻道管道包含以下處理程序(按此順序):
ApiMapper是可共享的,並且從SimpleInboundHandler派生。 創建時,ApiMapper從靜態文件創建FileRegion。 現在,每次請求“ /” uri都會發生:
第一個響應將按預期工作,瀏覽器將獲取完整文件並正確顯示它,並打印“ DONE”。 但是,如果再次調用“ /” uri,瀏覽器將不會顯示任何內容,而是永遠加載,但會打印“ DONE”。 然后,在重新啟動服務器后,我使用telnet手動進行呼叫。 第一個響應是正確的,但是隨后我注意到第二個調用僅返回標頭,但沒有內容。 “完成”仍然被打印。
所以我的問題是:同一個FileRegion對象可以多次使用嗎? 我還有其他錯嗎?
不,您不能多次寫入同一個FileRegion,因為在DefaultFileRegion
對象上更新了transferred
狀態。 您將需要為此處的每次寫入創建一個新的DefaultFileRegion
實例。
另外,您還需要確保在LastHttpContent
之后發送FileRegion
,否則在編寫第二個HttpResponse
時HttpResponseEncoder
的狀態機將不會處於正確的狀態。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.