Netty 动态变化的网状管道
我正在使用netty 4.0.25Final编写一个netty HTTP服务器。我需要根据HTTP GET请求中的一些参数在管道中添加各种处理程序Netty 动态变化的网状管道,netty,Netty,我正在使用netty 4.0.25Final编写一个netty HTTP服务器。我需要根据HTTP GET请求中的一些参数在管道中添加各种处理程序 pipeline.addLast(new HttpRequestDecoder(4096, 8192, 8192, false), new HttpResponseEncoder(), new HttpObjectAggregator(1048576),
pipeline.addLast(new HttpRequestDecoder(4096, 8192, 8192, false),
new HttpResponseEncoder(),
new HttpObjectAggregator(1048576),
decisionHandler
);
如果多个请求来自同一连接,则使用相同的管道。Request1可能需要Handler1,Request2可能需要Handler2,Request3可能需要Handler3。假设请求以Request1、Request2、Request3的形式出现。Request1将修改管道以添加Handler1
Tanima动态操作管道是一项相对昂贵的操作。如果您试图实现的只是一个简单的交换用例,比如委托,那么您可以编写一个处理程序来实现它。例如:
公共类SwitchCaseHandler扩展了ChannelInboundHandlerAdapter{
专用最终通道BoundHandler handler1=。。。;
专用最终通道BoundHandler handler2=。。。;
专用最终通道BoundHandler handler3=。。。;
...
@凌驾
公共无效信道读取(ctx、msg){
如果(isForHandler1(msg)){
handler1.channelRead(ctx,msg);
}否则如果(isForHandler2(msg)){
handler2.channelRead(ctx,msg);
} ...
}
}
请注意,handler[1 | 2 | 3]
实际上不需要是ChannelInboundHandler
。您可以定义一个非常简单的接口,如下所示:
公共接口ChannelMessageHandler{
void channelRead(ChannelHandlerContext ctx,Object msg)抛出异常;
}
你能试着帮我回答以下问题吗