Java Http服务器-Netty FileRegions是否可重用?
我目前在一个http服务器上工作,有些事情表现得有点奇怪。 我想生成动态内容,也只是提供静态文件。 为动态生成的内容提供服务是没有问题的。 因为我想从零拷贝中获利,所以我使用FileRegions来服务静态文件。 My channel pipline包含以下处理程序(按此顺序):Java Http服务器-Netty FileRegions是否可重用?,java,http,server,netty,Java,Http,Server,Netty,我目前在一个http服务器上工作,有些事情表现得有点奇怪。 我想生成动态内容,也只是提供静态文件。 为动态生成的内容提供服务是没有问题的。 因为我想从零拷贝中获利,所以我使用FileRegions来服务静态文件。 My channel pipline包含以下处理程序(按此顺序): HttpRequestDecoder HttpResponseEncoder HttpObjectAggregator ApiMapper ApiMapper是可共享的,并派生自SimpleInboundHandler
所以我的问题是:同一个FileRegion对象可以多次使用吗?我还做错了什么吗?不,当
DefaultFileRegion
对象上的transfered
状态更新时,您不能以这种方式多次写入同一个FileRegion。您需要为此处的每次写入创建一个新的DefaultFileRegion
实例
另外,您需要确保在
文件区域
之后发送LastHttpContent
,否则在编写第二个HttpResponseEncoder
时,HttpResponse中的状态机将不会处于正确状态,因此我可以重用LastHttpContent.EMPTY\u LAST\u内容?在发送之前我是否必须增加引用计数?是否最好创建一个直接ByteBuf,将文件内容存储在其中并重用它,然后每次创建一个新的DefaultFileRegion?我目前的应用程序时间不多,负载也不重,但我对未来的项目很好奇。