我正在Netty中编写HTTP代理服务器。
我希望channelRead
只能在我致电read
后最多一次被解雇
而且从来没有。换句话说,在我准备好接收消息之前,我不想要channelRead
。
我已设置AUTO_READ=false
。我在ctx.read()
(而不是其他地方)拨打channelActive
一次。
但是,对于基本curl http://localhost:8080/
,channelRead
处理程序会触发两次:
io.netty.handler.codec.http.DefaultHttpRequest
io.netty.handler.codec.http.LastHttpContent$1
在第二次致电LastHttpContent
之前,如何阻止ctx.read()
到达?
答案 0 :(得分:2)
FlowControlHandler
解决了这个问题:它专门用于启用此行为。
来自the docs:
FlowControlHandler
确保每read()
只有一条消息 送到下游。...
这是
HttpObjectDecoder
的常见问题 经常会发出一个HttpRequest
,紧接着是一个。{1}}LastHttpContent
事件。
ChannelPipeline pipeline = ...;
pipeline.addLast(new HttpServerCodec());
pipeline.addLast(new FlowControlHandler());
pipeline.addLast(new MyExampleHandler());