Java Netty (1)

Worker线程肩负对接收到的接连央求实行管理,纵然是NIO,一个Worker线程能够拍卖四个Socket或许说Channel,假使是平时IO,Worker线程和Socket恐怕说Channel是种种对应的涉嫌。

Java Netty (1),javanetty

Netty是由JBOSS提供的二个java开源框架,本质上也是NIO,是对NIO的包裹,比NIO越来越高等,功用更强硬。能够说发展的不二秘技是IO->NIO->Netty。

ServerBootstrap和ClientBootstrap是Netty中多少个相比较首要的类,分别用来开展服务器和顾客端的最早化。

服务器:

        // ChannelFactory
        final ChannelFactory channelFactory = new NioServerSocketChannelFactory(  
                // Boss线程池,处理Socket请求
                Executors.newCachedThreadPool(),  
                // Worker线程池,由于使用的是NIO,1个Worker线程可以管理多个Channel
                Executors.newCachedThreadPool()); 
        // ServerBootstrap
        ServerBootstrap bootstrap = new ServerBootstrap(channelFactory);

        ServerPipelineFactory serverPipelineFactory = new ServerPipelineFactory(executionHandler);
        bootstrap.setPipelineFactory(serverPipelineFactory); 

ServerBootstrap实例化时索要贰个ServerSocketChannelFactory参数,ServerSocketChannelFactory能够选拔NioServerSocketChannelFactory可能OioServerSocketChannelFactory,NioServerSocketChannelFactory使用的是NIO,OioServerSocketChannelFactory使用的是普普通通IO。两个都需求多个线程池,二个Boss线程池,二个Worker线程池。八个Boss线程担负对四个端口的监听,接收到Socket连接央浼今后交给贰个Worker线程处理,然后本人再而三监听。

Worker线程负担对吸取到的连年央浼实行管理,假设是NIO,贰个Worker线程可以拍卖五个Socket恐怕说Channel,假如是无独有偶IO,Worker线程和Socket只怕说Channel是各类对应的涉嫌。

Channel有音信到达时,Worker线程就进展管理。管理的经过看似于Struts的Filter-chain。各样Channel都有一个ChannelPipeline,ChannelPipeline定义了众多有种种的Handler,按梯次对收取到的音讯举行拍卖。

多少Handler,比方大气的IO操作,恐怕大批量的读写数据库,会变成对消息的管理时间过长,长时间据有Worker线程,那时就必要另贰个线程池--Netty自带的ExecutionHandler。ExecutionHandler也是五个Handler,定义在ChannelPipeline里面,它会从友好的线程池里面拿出三个线程,处理写在和谐背后的Handler,进而得以急速释放Worker线程。

ExecutionHandler的实例化:

static ExecutionHandler executionHandler = new ExecutionHandler(new OrderedMemoryAwareThreadPoolExecutor(16, 1048576, 1048576));

Excecutor有三种:MemoryAwareThreadPoolExecutor和OrderedMemoryAwareThreadPoolExecutor,前面贰个保障不会现出内部存款和储蓄器溢出荒唐,假若Event太多就能够堵塞,前者除了担保不会冒出内部存款和储蓄器溢出错误以外,还保险同一个Channel的Event依照顺序管理。

Netty (1),javanetty Netty是由JBOSS提供的叁个java开源框架,本质上也是NIO,是对NIO的包装,比NIO越来越高等,功用更抓好大。能够说发展的路...

Netty是由JBOSS提供的二个java开源框架,本质上也是NIO,是对NIO的卷入,比NIO更加高等,作用进一步强劲。能够说发展的门路是IO->NIO->Netty。

ServerBootstrap和ClientBootstrap是Netty中八个相当重大的类,分别用来展开服务器和客商端的开始化。

ExecutionHandler的实例化:

服务器:

Excecutor有二种:MemoryAwareThreadPoolExecutor和OrderedMemoryAwareThreadPoolExecutor,前面叁个保障不会并发内部存储器溢出荒唐,假如伊芙nt太多就能堵塞,前者除了担保不会产出内部存储器溢出错误以外,还保证同四个Channel的伊夫nt根据顺序处理。

ServerBootstrap实例化时索要八个ServerSocketChannelFactory参数,ServerSocketChannelFactory可以选取NioServerSocketChannelFactory也许OioServerSocketChannelFactory,NioServerSocketChannelFactory使用的是NIO,OioServerSocketChannelFactory使用的是常见IO。两个都亟需八个线程池,三个Boss线程池,二个Worker线程池。多少个Boss线程担负对二个端口的监听,接收到Socket连接乞请未来交给三个Worker线程管理,然后自个儿继续监听。

稍加Handler,举个例子大气的IO操作,也许大量的读写数据库,会导致对消息的管理时间过长,长时间占领Worker线程,那时就要求另二个线程池--Netty自带的ExecutionHandler。ExecutionHandler也是三个Handler,定义在ChannelPipeline里面,它会从本人的线程池里面拿出贰个线程,处理写在自个儿背后的Handler,进而得以赶紧释放Worker线程。

static ExecutionHandler executionHandler = new ExecutionHandler(new OrderedMemoryAwareThreadPoolExecutor(16, 1048576, 1048576));

Channel有音讯达到时,Worker线程就张开管理。管理的长河看似于Struts的Filter-chain。各样Channel都有贰个ChannelPipeline,ChannelPipeline定义了好多有各种的Handler,按顺序对吸收到的音信举办拍卖。

        // ChannelFactory
        final ChannelFactory channelFactory = new NioServerSocketChannelFactory(  
                // Boss线程池,处理Socket请求
                Executors.newCachedThreadPool(),  
                // Worker线程池,由于使用的是NIO,1个Worker线程可以管理多个Channel
                Executors.newCachedThreadPool()); 
        // ServerBootstrap
        ServerBootstrap bootstrap = new ServerBootstrap(channelFactory);

        ServerPipelineFactory serverPipelineFactory = new ServerPipelineFactory(executionHandler);
        bootstrap.setPipelineFactory(serverPipelineFactory); 

本文由开元棋牌发布于数据库,转载请注明出处:Java Netty (1)

TAG标签:
Ctrl+D 将本页面保存为书签,全面了解最新资讯,方便快捷。