使用 Netty 写了一个简单的 http 服务器 (包括静态资源, servlet 请求的响应).记录一下遇到的问题和解决方法.
fireChannelRead(Object msg)
此方法用来将请求传递给下一个 ChanelHandlerInboundHandler 来处理.
代码中下一个handler 的 channelRead0 的参数为:
ChannelHandlerContext ctx, FullHttpRequest request
1.其有一个参数,就是传递的 msg .此 msg 不能乱填,要为 request,因为它是在下一个 Handler 的 channelread0 方法中,中作为参数的,所以要参考下一个 handler 中对应的参数,是什么就传什么.
2.如果直接传 reuqest, 会报错.
错误如下
io.netty.util.IllegalReferenceCountException: refCnt: 0, decrement: 1
at io.netty.buffer.AbstractReferenceCountedByteBuf.toLiveRealCnt(AbstractReferenceCountedByteBuf.java:181)
at io.netty.buffer.AbstractReferenceCountedByteBuf.release0(AbstractReferenceCountedByteBuf.java:133)
at io.netty.buffer.AbstractReferenceCountedByteBuf.release(AbstractReferenceCountedByteBuf.java:124)
at io.netty.handler.codec.http.HttpObjectAggregator$AggregatedFullHttpMessage.rel