关于如何在Netty中编写阻塞应用程序代码的详细信息?

关于如何在Netty中编写阻塞应用程序代码的详细信息?,netty,Netty,我在这里看到常见问题,但我正在寻找更多细节。(代码摘自下面的常见问题。) 我假设DefaultEventExecutor应该是DefaultEventExecutorGroup,但我没有找到一个全面的解释,让我知道在MyHandler类中放置什么,或者如何处理更复杂的情况 您在MyHandler中实现了什么收到的消息 信息如何从上一步(HttpChunkAggregator)流向MyHandler?换句话说,一个处理程序调用什么来将消息传递给下一个处理程序 如果有两个具有阻塞代码的处理程序,它

我在这里看到常见问题,但我正在寻找更多细节。(代码摘自下面的常见问题。) 我假设
DefaultEventExecutor
应该是
DefaultEventExecutorGroup
,但我没有找到一个全面的解释,让我知道在
MyHandler
类中放置什么,或者如何处理更复杂的情况

  • 您在MyHandler中实现了什么<代码>收到的消息
  • 信息如何从上一步(
    HttpChunkAggregator
    )流向
    MyHandler
    ?换句话说,一个处理程序调用什么来将消息传递给下一个处理程序
  • 如果有两个具有阻塞代码的处理程序,它们可以并行执行,那么您将如何做到这一点,然后(我猜)将它们的结果合并到第三个处理程序中,以编写响应
[来自]

publicstaticvoidmain(字符串[]args)引发异常{
final EventExecutor executor=新的DefaultEventExecutor(8);
ServerBootstrap bootstrap=newserverbootstrap();
group(新的NioEventLoopGroup(),新的NioEventLoopGroup());
childHandler(新的ChannelInitializer(){
@凌驾
公共频道(频道){
ChannelPipeline=channel.pipeline();
addLast(“解码器”,新的HttpRequestDecoder());
pipeline.addLast(“聚合器”,新的HttpChunkAggregator(65536));
addLast(“编码器”,新的HttpResponseEncoder());
addLast(“chunkedWriter”,新的ChunkedWriteHandler());
//MyHandler包含阻止的代码,所以将其添加到
//将EventExecutor添加到管道。
addLast(执行器,“handler”,new MyHandler());
}
});
某人绑定(socketAddress);
//其他代码
}
公共类MyHandler扩展了SimpleChannelUpstreamHandler{
//阻止应用程序代码
虽然它适用于3.x,但可能会给你一个想法。它已从4.0中删除,因为它不是很有用-大多数人只是想保持异步。请注意,使用基于反应器的框架模拟阻塞操作只会由于增加上下文切换而降低性能

public static void main(String[] args) throws Exception {
    final EventExecutor executor = new DefaultEventExecutor(8);

    ServerBootstrap bootstrap = new ServerBootstrap();
    bootstrap.group(new NioEventLoopGroup(), new NioEventLoopGroup());
    bootstrap.childHandler(new ChannelInitializer<Channel>() {
        @Override
        public void initChannel(Channel channel) {
            ChannelPipeline pipeline = channel.pipeline();
            pipeline.addLast("decoder", new HttpRequestDecoder());
            pipeline.addLast("aggregator", new HttpChunkAggregator(65536));
            pipeline.addLast("encoder", new HttpResponseEncoder());
            pipeline.addLast("chunkedWriter", new ChunkedWriteHandler());

            // MyHandler contains code that blocks so add it with the
            // EventExecutor to the pipeline.
            pipeline.addLast(executor, "handler", new MyHandler());        
        }
     });

     sb.bind(socketAddress);

     // Other code

  }


   public class MyHandler extends SimpleChannelUpstreamHandler {
      // Your blocking application code